Maven - EPN Campus Forge
Download
Report
Transcript Maven - EPN Campus Forge
Maven
04 March 2016
Introduction
Java projects originally managed with Ant
Manual build process
Ant scripts to compile, generate IDL, jar
Low-level scripting
No dependency management
No version management
Introduction
Java projects originally managed with Ant
Manual build process
Ant scripts to compile, generate IDL, jar
Low-level scripting
No dependency management
No version management
• Maven provides high-level features for build
process
Maven vs Ant
Ant originated from the Apache Tomcat project in
early 2000
Individual build.xml
No constraints on the build process
• Maven initial release in july 2004
Shared pom.xml
Published on shared repositories
Build process constrained
Maven build lifecycle
Artifact concept
Java “package” to be deployed
Different types of artifact (jar, war, plugin, …)
Dependent lifecycle
Phases for jar
• process-resources, compile, process-testresources, test-compile, test, package,
install, deploy
Default behaviour
Maven dependencies
All the dependencies are defined
Example :
<dependency>
<groupId>avalon-framework</groupId>
<artifactId>avalon-framework-impl</artifactId>
<version>4.2.0</version>
</dependency>
Maven automatically updates and downloads the
jar
Maven repositories
Important concept of Maven
Every artifact is published to a repository
4 types of repository
–
–
–
–
Central
Public
Private
Local
Maven repositories
Nexus Repository
ILL private
https://maven.ill.fr/
– Releases
– Snapshots
– Central mirror or proxy
– Thirdparty
Compilation on the instruments
Nexus users, right to publish snapshots, releases
Maven plugins
A type of dependency
Customize the build
Examples
– Force compilation in Java 1.7 rather than default
– Incorporate SVN revision in jar
– Generate a single jar that contains all the
dependencies
– Android support
Share the code
Code versioning
Every artifact has a version
Nomad and NomadCommandSystem must be
versioned
Nomad and NomadCommandSystem can have
dissociated versions
Nomad can reference an older
NomadCommandSystem
Version strategy to be defined
Code versioning strategy
Release vs Snapshot
– Deploy a release only once
– Deploy multiple snapshots during development
Version deployment example
– 1.2.1 deployed
– 1.2.2-SNAPSHOT deployed
– 1.2.2-SNAPSHOT deployed
– …
– 1.2.2 deployed
Changelog to be updated (ideally for each commit)
Code versioning strategy
Version numbering
– Not important for an application
(e.g. NomadGUI)
– Important for a library
(e.g. NomadCommmandSystem)
– We can discuss it
major.minor.revision
Profiles
Possibility to define profiles
Build for different platforms
SWT profiles for GTK 32bits, GTK 64bits
Default profile in .m2/settings.xml
Modules
Maven own module concept
A module inherits parent pom.xml
Deployment can be independent
Project NomadGUISpecialModules
Day to day usage
Maven not required to run NomadGUI
Maven required to compile NomadGUI,
NomadCommandSystem, Cameo server and
API
Eclipse integration
Command-line
> mvn install
> mvn -P gtk_linux_x86 install
Conclusion
Maven has lots of features
But with a well-defined organization, will bring more
than it costs