Maven 2 The Maven Team @ Apache.

Slides:



Advertisements
Similar presentations
Configuration management
Advertisements

Configuration management
Introduction to Maven 2.0 An open source build tool for Enterprise Java projects Mahen Goonewardene.
Developing in CAS. Why? As distributed you edit CAS 3 with Eclipse and build with Maven 2 – Best Practice for Release Engineering – Difficult edit-debug.
Introduction to Maven Michael Youngstrom. Notes This is a training NOT a presentation Please ask questions Prerequisites – Introduction to the Java Stack.
Build your Android App with Gradle Android new build system.
Managing your dependencies with Xavier Hanin
ANT: Another Nice Tool Ali Beyad October 1, 2003.
Java Build Tool Comparison HJUG - April 29th, 2009 John Tyler.
Maven: Build and project management in the 21th century.
Presented by IBM developer Works ibm.com/developerworks/ 2006 January – April © 2006 IBM Corporation. Making the most of Creating Eclipse plug-ins.
Systems Analysis and Design in a Changing World, 6th Edition
Web Applications Basics. Introduction to Web Web features Clent/Server HTTP HyperText Markup Language URL addresses Web server - a computer program that.
2007 Adobe Systems Incorporated. All Rights Reserved. 1 Joe Berkovitz VP Engineering Allurent, Inc. Continuous Integration with Flex, FlexUnit, and Ant.
Using Ant to build J2EE Applications Kumar
APACHE MAVEN Bhavana Sudharshan Jaydeep Patel. Introduction What is Maven? “Maven is a software management and comprehension tool based on the concept.
Version Control with Subversion. What is Version Control Good For? Maintaining project/file history - so you don’t have to worry about it Managing collaboration.
Maven and Stack Starter Michael Youngstrom. Notes This is a training NOT a presentation Please ask questions Prerequisites – Introduction to Java Stack.
M. Taimoor Khan * Java Server Pages (JSP) is a server-side programming technology that enables the creation of dynamic,
SOA-14: Continuous Integration in SOA Projects Experience from the field Andreas Gies Principal Architect.
Sumedha Rubasinghe October,2009 Introduction to Programming Tools.
LDS Account Integration. Disclaimer This is a training NOT a presentation. – Be prepared to learn and participate in labs Please ask questions Prerequisites:
Using the ALM Module Fully Automated Deployments in Stack 3.2.
INFSOM-RI Juelich, 10 June 2008 ETICS - Maven From competition, to collaboration.
July 2011CMSC 341 CVS/Ant 1 CMSC 341 Java Packages Ant CVS Project Submission.
Overview of the Automated Build & Deployment Process Johnita Beasley Tuesday, April 29, 2008.
Configuration Management CSCI 5801: Software Engineering.
CPSC 871 John D. McGregor Change management Module 2 Session 3.
Maven 2.0 Improve your build patterns Vincent Massol CTO Pivolis.
G.Govi CERN/IT-DB 1 September 26, 2003 POOL Integration, Testing and Release Procedure Integration  Packages structure  External dependencies  Configuration.
Build Systems Presentation December 14, 2015 Noon-1pm Kathy Lee Simunich Bldg. 203/ D120 Brought to you by: Argonne Java.
Maven 2 The Maven Apache. Overview What's new in Maven 2.0 Maven 2.0 and Ant... and anything else you'd like to know about.
Maven. Introduction Using Maven (I) – Installing the Maven plugin for Eclipse – Creating a Maven Project – Building the Project Understanding the POM.
Maven and Jelly James Strachan. Introduction Maven and Jelly are both Apache projects at Jakarta Ultimately both will be top.
Maven & NetBeans Platform. Agenda ● Maven NetBeans Platform Project Types ● Three NetBeans RCP project types ● Differences with Ant project types ● All.
Platform & Maven2 David Šimonek. Certified Engineer Course Agenda What is Maven? Why Maven? NB IDE & Maven NB Platform & Maven.
NB UML takeover by community Sergey B. Petrov Former NetBeans UML Developer Jiří Kovalský NetBeans Community Manager August 16 th, 2010.
Node.js Modules Header Mastering Node.js, Part 2 Eric W. Greene
Open-O Integration Project Introduction
Maven 04 March
Essentials of UrbanCode Deploy v6.1 QQ147
CS520 Web Programming Introduction to Maven
Plan What is Maven ? Links : mvn command line tool
Chapter 11: Software Configuration Management
John D. McGregor Eclipse Process Framework Module 2 Session 4
Cross Platform Development using Software Matrix
Overall Architecture and Component Model
Brian Leonard ブライアン レオナルド
prepared by hasan.we4tech.com
UAB Development Status
Project management and comprehension tool
IT Atoumation / Conf. Mgmt...
Maintaining software solutions
Advanced Integration and Deployment Techniques
slides borrowed and adapted from Alex Mariakis and CSE 390a
X in [Integration, Delivery, Deployment]
Maven IIB9 Plug-in Version 9.0
What’s changed in the Shibboleth 1.2 Origin
Mark Dönszelmann Stanford Linear Accelerator Center
ESIS Consulting LLC (C) ESIS Consulting LLC. All rights reserved
Module 01 ETICS Overview ETICS Online Tutorials
JENKINS TIPS Ideas for making your life with Jenkins easier
Chapter 11: Software Configuration Management
Maven IIB9 Plug-in Version 9.0
Escidoc build and development environment
Overview Activities from additional UP disciplines are needed to bring a system into being Implementation Testing Deployment Configuration and change management.
Continuous Integration
Java Code Review with CheckStyle
Plug-In Architecture Pattern
Presentation transcript:

Maven 2 The Maven Team @ Apache

... and anything else you'd like to know about Overview What's new in Maven 2.0 Maven 2.0 and Ant ... and anything else you'd like to know about

Is a complete rewrite from Maven 1.0/1.1 Scheduled for beta testing in July, final release in August Built around reusable libraries: Artifact code used in Ant tasks Wagon, SCM and project loading being used in Maven 1.1

More consistent definition of all parts of the system Why rewrite Maven for 2.0? Started parallel development in early 2003, well before Maven 1.0 final! More consistent definition of all parts of the system Architecture supports features and that the original couldn't Faster, lighter, smaller - embeddable Making it simpler to use required reworking many core concepts

Maven 2.0 Architecture

Maven 2.0 Architecture - Plexus Based on Plexus – an IoC container supporting component oriented programming (COP) encouraging a clear Separation of Concerns (SoC) Plugins are handled as Plexus components though plugins have no direct dependency on Plexus

Maven 2.0 Component Architecture

Maven 2.0 New Features (alpha-3) Enhanced dependency support Build life cycle Unified project file Enhanced plug-in support Multi-module project support Site and documentation enhancements Release management Archetypes - project templates Build Profiles

Main hurdle is non-redistributable artifacts – manual installation Adding Dependencies Declaration will download it, add it to the classpaths, bundle it into the resulting distribution if appropriate, etc. Main hurdle is non-redistributable artifacts – manual installation Now transitive – dependencies of dependencies Added transitiviity <dependencies> <dependency> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-provider-api</artifactId> <version>1.0-alpha-3</version> </dependency> </dependencies>

Transitive Dependencies Always enabled in Maven 2.0 Don't need to declare dependencies of dependencies yourself Frequently requested, but has more consequences than often realised... Version conflicts Unwanted dependencies Bad published meta data – report at http://jira.codehaus.org/browse/MEV Not a hard problem with good data

compile (default), runtime, test, provided Dependency Scope compile (default), runtime, test, provided Control classpath and distribution bundling Helpful for transitive dependencies (don't get test transitively) Only need to specify one – others may be implied

Controlling Transitive Dependencies Filter out dependencies Preferably dependency would be split into isolated pieces, with one POM to aggregate back if needed E.g. Velocity “depends” on JDBC, but only in some conditions <dependency> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-provider-api</artifactId> <version>1.0-alpha-3</version> <exclusions> <exclusion> <groupId>jdbc</groupId> <artifactId>jdbc</artifactId> </exclusion> </exclusions> </dependency>

Don’t need to update dependency version to get updated builds Snapshot Handling Deploying to a shared repository gives a version with a time stamp and build # Don’t need to update dependency version to get updated builds Updates daily, on-demand, or at a particular interval Developers can get access to co- workers changes earlier without the need to update and build

Builds in Maven follow a pattern Build Life cycle Builds in Maven follow a pattern Ensures developers moving between projects do not need to learn new processes

Plugins can augment the build life cycle For example: JAXB could register an XSD to Java goal in generate-sources, then add it to the compilation list Xdoclet could register a goal to create a Hibernate mapping in process-resources. The builder still only needs to know to use m2 package Replaces use of preGoal from Maven 1

Unified Project File Self contained, and no file system references making it usable from the repository project.properties and maven.xml replaced by custom plugins and configuration parent element replaces extend <parent> <groupId>org.apache.maven</groupId> <artifactId>maven</artifactId> </parent>

Configure how your project is built Configuring Plugins Configure how your project is built In Maven 1, project.properties file Example: compile with JDK 5.0 options <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build>

Plugins can be requested on-demand from the command line On-demand Features Plugins can be requested on-demand from the command line In Maven 1, this required manual installation For example, idea:idea will generate an IDEA project file without modifications to your project

Plugin Version Discovery Can opt not to declare a plugin version in your project Will regularly check for a new release, and download it if desired Users can opt to get prompted for new releases of plugins Release tool will record the active version for reproducible builds

Java, Beanshell, Marmalade Java is the most common Plugin Languages Java, Beanshell, Marmalade Java is the most common Beanshell is new, useful for rapid prototyping Marmalade is primarily to ease porting of Jelly-based plugins, and to make available Ant tasks in an XML syntax Can support others with a small amount of work if there is demand For example: Jython, Groovy, JRuby

Java Plugin import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; ... /** * Goal which cleans the build. * @goal touch * @phase process-sources */ public class CoreItMojo extends AbstractMojo { /** @parameter expression="${project.build.directory}" * @required private File outputDirectory; /** Whether it is enabled. * @parameter private boolean enabled; public void execute() throws MojoExecutionException { if ( enabled ) getLog().info( “Path is ” + outputDirectory ); }

Beanshell Plugin /** * Beanshell mojo integration test. * @goal it0020 */ import org.apache.maven.plugin.Mojo; import org.apache.maven.script.beanshell.BeanshellMojoAdapter; import org.codehaus.plexus.util.FileUtils; execute() { logger.info( "Executing it0020..." ); print( "info level?" ); FileUtils.fileWrite( outDir.getAbsolutePath() + "/out.txt", "This is a Beanshell test" ); } * Output directory for files. * * @parameter expression="${project.build.directory}" type="java.io.File" * @required setOutDir( file ) outDir = file; return new BeanshellMojoAdapter( (Mojo) this, this.interpreter );

Marmalade <mojo xmlns="marmalade:mojo"> <metadata> <goal>it0015</goal> <description> Output a file with specified contents to [outDir] </description> <parameters> <parameter> <name>outDir</name> <type>java.lang.String</type> <expression>${project.build.directory}</expression> <description>Output directory for files.</description> </parameter> </parameters> </metadata> <execute> <it0015:writeFile xmlns:it0015="marmalade:it0015" path="${outDir}/out.txt"> This is a test. </it0015:writeFile> </execute> </mojo>

Maven 2 natively deals with multi- module builds Multiple Modules Maven 2 natively deals with multi- module builds A module refers to another project in the build tree Goals are performed on all found modules by default, so m2 install will perform an install for all found modules Modules can in turn have modules <modules> <module>wagon-provider-api</module> <module>wagon-providers</module> </module>

Site and Documentation A lot faster than previously Accepts several input formats Almost Plain Text (Wiki like) Xdoc (Maven 1.0 compatible) FAQ (Maven 1.0 compatible) Docbook Presently outputs XHTML, Xdoc, Docbook, Latex and RTF PDF also planned

Example APT Document ------ Generating a Site Brett Porter 13 May 2005 Building a Site * Creating Content The first step to creating your site is to create some content. In Maven 2.0, the site content is separated by format, as there are several available. ------------------- +- src/ +- site/ +- apt/ | +- index.apt +- site.xml -------------------- The Xdoc format is the same as {{{http://maven.apache.org/using/site.html} used in Maven 1.0}}. However, <<<navigation.xml>>> has been replaced by the site descriptor (see below).

Example APT Document

Improvement on the tasks from the SCM plugin in Maven 1.0 Release Assistance Improvement on the tasks from the SCM plugin in Maven 1.0 Resolves information in the project to make the release reproducible Updates the version information, commits and tags a release Does a clean checkout and builds the release Can be in the same environment, or a dedicated known build environment

Generates a template project for you Currently archetypes for: Project Archetypes m2 archetype:create Generates a template project for you Currently archetypes for: JAR/WAR Site Java and Marmalade Plugins Can easily create your own archetypes Uses Velocity Downloaded from the repository so they are easily shared

Change the build depending on the environment Build Profiles Change the build depending on the environment Dependencies, repositories, plugins and configuration Trigger by operating system, JDK, extistence of software, and so on, as well as command line parameter Per user or per project Used to set up standard environments: Development, Test, QA and Production

Maven 2.0 Features Coming (July) More on dependency mediation Other languages (maybe beyond 2.0)

Allows specification of a range of versions for a dependency Dependency Mediation Allows specification of a range of versions for a dependency Maven will help resolve the best version available Techniques for handling conflicts Fail, Newest, Nearest Release tool fills in versions later <dependency> <groupId>jaxb</groupId> <artifactId>jaxb-api</artifactId> <version>[1.0.1,)</version> </dependency>

Support for Other Languages Being implemented as plugins Currently have seen work on a C# compiler, and plan to support C/C++ environments on Unix and Windows May not be available at Maven 2.0 final release

Moving from Ant to Maven 2 Identify sections of build.xml that are standard functionality Build Maven 2 projects from scratch Use m2 ant:ant to generate and use from master Ant script Create Maven plugins for custom functionality, wrap them as Ant tasks If Ant already works fine for you, you can still use some Maven features from Ant 1.6 today

Currently exposes the dependency and artifact handling as Ant tasks Using Maven 2 From Ant Currently exposes the dependency and artifact handling as Ant tasks Ant 1.7 will utilise the artifact antlib for dependency management Download dependencies (all features) Share a local Maven repository Install and deploy artifacts to a repository Expose a POM as Ant properties

The Artifact Antlib <project ... xmlns:artifact="antlib:org.apache.maven.artifact.ant"> <target name="..."> <artifact:localRepository id="local.repository" location="${basedir}/target/local-repo" /> <artifact:dependencies pathId="dependency.classpath" filesetId="dependency.fileset"> <dependency groupId="org.apache.maven.wagon" artifactId="wagon-provider-test" version="1.0-alpha-2"/> <dependency groupId="org.codehaus.modello" artifactId="modello-core" version="1.0-alpha-2-SNAPSHOT"/> <localRepository refid="local.repository"/> </artifact:dependencies> <!-- Can reuse POM --> <artifact:pom id=“maven.project” file=“pom.xml”/> <artifact:dependencies filesetId=“pom.dependencies”> <pom refid=“maven.project”/> <!-- Access to POM as properties --> <echo>Now building ${maven.project.name}</echo> ...

The Artifact Antlib ... <artifact:remoteRepository id="deploy.repository" url="file://${basedir}/target/deployment-repo" layout="legacy"/> <artifact:install file="target/maven-artifact-ant-2.0-SNAPSHOT.jar"> <localRepository refid="local.repository"/> <pom refid="maven.project"/> </artifact:install> <artifact:deploy file="target/maven-artifact-ant-2.0-SNAPSHOT.jar"> <remoteRepository url="scp://localhost/tmp/deployment-repo"> <authentication username="brett" privateKey="${user.home}/.ssh/id_dsa"/> </remoteRepository> </artifact:deploy>

Maven has project generation for several IDEs for one way creation Maven and the IDE MevenIDE project Started out with NetBeans, Eclipse Relatively new Jbuilder and IDEA plugins Shared base code Changes reflect in project and IDE Planning support for embedded Maven 2 and remote Continuum Independent of the Maven project Maven has project generation for several IDEs for one way creation

Maven site and lists Maven Blogs Resources http://maven.apache.org/ http://www.mavenblogs.com/

Getting Involved As with any open source project, there are several ways you can get involved Join the mailing list and answer other user's questions Report bugs, feature requests and other issues in the issue tracking application. Submit patches to reported issues (both those you find, or that others have filed)

Questions? Thanks for listening!