Download presentation
Presentation is loading. Please wait.
1
Maven 2 The Maven Apache
2
... 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
3
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
4
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
5
Maven 2.0 Architecture
6
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
7
Maven 2.0 Component Architecture
8
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
9
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>
10
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 Not a hard problem with good data
11
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
12
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>
13
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
14
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
15
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
16
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>
17
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>
18
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
19
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
20
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
21
Java Plugin import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException; ... /** * Goal which cleans the build. touch process-sources */ public class CoreItMojo extends AbstractMojo { expression="${project.build.directory}" * @required private File outputDirectory; /** Whether it is enabled. private boolean enabled; public void execute() throws MojoExecutionException { if ( enabled ) getLog().info( “Path is ” + outputDirectory ); }
22
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 it " ); print( "info level?" ); FileUtils.fileWrite( outDir.getAbsolutePath() + "/out.txt", "This is a Beanshell test" ); } * Output directory for files. * expression="${project.build.directory}" type="java.io.File" setOutDir( file ) outDir = file; return new BeanshellMojoAdapter( (Mojo) this, this.interpreter );
23
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>
24
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>
25
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
26
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 {{{ used in Maven 1.0}}. However, <<<navigation.xml>>> has been replaced by the site descriptor (see below).
27
Example APT Document
28
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
29
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
30
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
31
Maven 2.0 Features Coming (July)
More on dependency mediation Other languages (maybe beyond 2.0)
32
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>
33
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
34
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
35
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
36
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> ...
37
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>
38
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
39
Maven site and lists Maven Blogs Resources http://maven.apache.org/
40
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)
41
Questions? Thanks for listening!
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.