Pour aller plus loin : Programmation outillée

Similar documents
What is Maven? Apache Maven is a software project management and comprehension tool (build, test, packaging, reporting, site, deploy).

Maven. INF5750/ Lecture 2 (Part II)

Content. Development Tools 2(57)

Maven POM project modelversion groupid artifactid packaging version name

Simplified Build Management with Maven

Apache Maven. Created by anova r&d bvba

Topics covered. Introduction to Maven Maven for Dependency Management Maven Lifecycles and Plugins Hands on session. Maven 2

MAVEN INTERVIEW QUESTIONS

maven Build System Making Projects Make Sense

MAVEN MOCK TEST MAVEN MOCK TEST IV

Set up Maven plugins in Eclipse. Creating a new project

Maven 2 The powerful buildsystem. a presentation for EL4J developers by Martin Zeltner (MZE) November 2007

sites</distribsiteroot>

4. Check the site specified in previous step to work with, expand Maven osgi-bundles, and select slf4j.api,

MANUAL DO ALUNO DE ENGENHARIA DE SOFTWARE

Maven 2 & Continuum. by Trygve Laugstøl

TOP REASONS WHY YOU SHOULD SWITCH TO MAVEN 3

Maven Introduction to Concepts: POM, Dependencies, Plugins, Phases

Apache Maven MarsJUG. Arnaud Héritier exo platform Software Factory Manager

I Got My Mojo Workin'

... Maven.... The Apache Maven Project

The Maven 2 POM demystified

MAVEN MOCK TEST MAVEN MOCK TEST III

Sonatype CLM Enforcement Points - Nexus. Sonatype CLM Enforcement Points - Nexus

Sonatype CLM - IDE User Guide. Sonatype CLM - IDE User Guide

MAVEN MOCK TEST MAVEN MOCK TEST I

Apache Maven. Péter Jeszenszky Faculty of Informatics, University of Debrecen Last modified: March 8, 2018

Maven in the wild. An introduction to Maven

... Apache Maven PDF Plugin v. 1.4 User Guide.... The Apache Software Foundation

AUTOMATION TESTING FRAMEWORK FOR LUMINOUS LMS

Package Management and Build Tools

Produced by. Agile Software Development. Eamonn de Leastar

Component based Development. Table of Contents. Notes. Notes. Notes. Web Application Development. Zsolt Tóth

Hello Maven. TestNG, Eclipse, IntelliJ IDEA. Óbuda University, Java Enterprise Edition John von Neumann Faculty of Informatics Lab 2.

Construction: version control and system building

Repository Management and Sonatype Nexus. Repository Management and Sonatype Nexus

Oracle Code Day Hands On Labs (HOL) (Install, Repository, Local Deploy, DevCS, OACCS)

Introduction to project industrialization using Maven YaJUG 06/10/2009. Copyright Pierre-Antoine Grégoire License Creative Commons 2.

Setting up a Maven Project

Oracle Code Day Hands On Labs HOL

Software Engineering - Development Infrastructure 2. Kristjan Talvar Nortal

Fat / Uber jars - Using the Shade Plugin

Apache Maven: Best Practices

DevOps and Maven. Eamonn de Leastar Dr. Siobhán Drohan Produced by:

STQA Mini Project No. 1

This tutorial explains how you can use Gradle as a build automation tool for Java as well as Groovy projects.

BUILD AND DEPLOY SOA PROJECTS FROM DEVELOPER CLOUD SERVICE TO ORACLE SOA CLOUD SERVICE

Red Hat Fuse 7.0 Installing on Apache Karaf

An Integrated Approach to Managing Windchill Customizations. Todd Baltes Lead PLM Technical Architect SRAM

FROM NOTHING TO COMPLETE ENVIRONMENT WITH MAVEN, OOMPH & DOCKER. Max Bureck, 21. June 2017

Packaging, automation, Continuous Integration

juddi Developer Guide

Overall Design of SSS Software

mvn package -Dmaven.test.skip=false //builds DSpace and runs tests

Software Building (Sestavování aplikací)

Gant as Ant and Maven Replacement

Unable To The Artifact From Any Repository Maven-clean-plugin

Tuscany: Applying OSGi modularity after the fact

Continuous Integration & Code Quality MINDS-ON NUNO 11 APRIL 2017

Beware: Testing RCP Applications in Tycho can cause Serious Harm to your Brain. OSGi p2

MAVEN SUCKS NO(W) REALLY

Class Dependency Analyzer CDA Developer Guide

Cheat Sheet: Wildfly Swarm

Build Tools. Software Engineering SS A tool was needed. Agenda for today. Build tools. Software complexity. Build tools

Maven 2.1 Artifact Resolution Specification

Build Tools. Software Engineering SS 2007

Funambol Connector Development Tutorial

Denn n i n s i s L und n b d erg r

Example ear-testing can be browsed at

Sonatype CLM - CI User Guide. Sonatype CLM - CI User Guide

Red Hat JBoss Fuse 6.1

CHAPTER 6. Java Project Configuration

Red Hat Fuse 7.0 Deploying into Apache Karaf

IBM. IBM WebSphere Application Server Migration Toolkit. WebSphere Application Server. Version 9.0 Release

PRIMIX SOLUTIONS. Core Labs. Java Build Environment

APEX Developer Guide. Sven van der Meer, Liam Fallon, John Keeney. Version SNAPSHOT, T11:44:57Z

Tattletale. What is Tattletale? Enterprise archives JBoss Application Server 7 Putting it all together Roadmap

JavaLand Dirk Mahler

Session 24. Spring Framework Introduction. Reading & Reference. dev.to/lechatthecat/how-to-use-spring-boot-java-web-framework-withintellij-idea-202p

JUG Saxony Day Dirk Mahler

Red Hat Fuse 7.1 Deploying into Spring Boot

We d like to hear your suggestions for improving our indexes. Send to

JPA Tools Guide (v5.0)

Apache Isis Maven plugin

TIBCO StreamBase 10.2 Building and Running Applications in Studio, Studio Projects and Project Structure. November 2017

IBM Workplace Collaboration Services API Toolkit

BUILD AND DEPLOY ORACLE SERVICE BUS PROJECTS FROM ORACLE DEVELOPER CLOUD SERVICE TO ORACLE SOA CLOUD SERVICE USING THE ORACLE SERVICE BUS PLUG-IN

GRAPHSJ 3: A MODERN DIDACTIC APPLICATION FOR GRAPH ALGORITHMS

Struts 2 Maven Archetypes

GlassFish V3 Engineer's guide

Build Automation Kurt Christensen

Specification Lead: Red Hat Inc.

Moven. Machine/Deep Learning Models Distribution Relying on the Maven Infrastructure. Sergio Fernández (Redlink GmbH) November 14th, Sevilla

Step 2. Creating and running a project(core)

Red Hat JBoss Fuse 6.3

Red Hat Decision Manager 7.1 Packaging and deploying a Red Hat Decision Manager project

Red Hat JBoss Fuse 6.2

What s new in IBM Operational Decision Manager 8.9 Standard Edition

Mobiliser CODE GENERATION - DAO-2-Service

B. Assets are shared-by-copy by default; convert the library into *.jar and configure it as a shared library on the server runtime.

Transcription:

Pour aller plus loin : Programmation outillée Denis Conan Revision : 2521 CSC4102 Télécom SudParis Décembre 2017

Pour aller plus loin : Programmation outillée Table des matières Pour aller plus loin : Programmation outillée Denis Conan,, Télécom SudParis, CSC4102 Décembre 2017 1 1 Construction de logiciel avec Maven 3 1.1 Artifact names and project relationships............................... 3 1.1.1 Local repository and snapshot versions............................ 4 1.2 Life-cycle for jar packaging simplified............................... 4 1.3 Build life-cycles, phases and goals.................................. 5 1.4 Standard directory structure a less simplified view....................... 5 1.5 More details on the build process................................... 6 1.5.1 Exemplification with the JAR build life-cycle........................ 6 1.5.2 Life-cycle for jar packaging.................................. 6 1.5.3 Default life-cycle........................................ 7 1.5.4 Ways to manipulate build life-cycle *............................. 7 1.6 Multi-module software repository................................... 9 1.6.1 Aggregation in multi-module projects............................ 9 1.6.2 POM file of a submodule................................... 9 1.6.3 Dependency inheritance.................................... 10 1.7 Dependencies conflict resolution................................... 11 1.8 Plug-ins................................................. 12 1.8.1 Compilation : mvn compile.................................. 12 1.8.2 Unit tests : mvn test...................................... 12 1.8.3 Installation (mvn install) and deployment (mvn deploy).................. 13 1.8.4 Execution : mvn exec :java.................................. 13 1.8.5 Eclipse : mvn eclipse :eclipse clean.............................. 14 1.9 Properties *............................................... 15 1.10 Other plug-ins *............................................ 16 1.10.1 Filtering resources : mvn process-resources *........................ 16 1.10.2 Packaging : mvn package................................... 16 1.11 Default life-cycle for project s web site generation *........................ 18 1.11.1 Site descriptor *........................................ 18 1.11.2 Web site reports *....................................... 18 1.11.3 Helping *............................................ 19 1.11.4 More on plug-ins *...................................... 19 1.12 Maven Versus Ant and Versus Make................................. 21 1.12.1 Ant beyond make-like tools.................................. 21 1.12.2 Maven beyond Ant....................................... 21 Télécom SudParis Denis Conan Décembre 2017 CSC4102 2

Pour aller plus loin : Programmation outillée 1 Construction de logiciel avec Maven 1 Construction de logiciel avec Maven # 2 1.1 Artifact names and project relationships........................................ 3 1.2 Life-cycle for jar packaging simplified........................................ 5 1.4 Build life-cycles, phases and goals.............................................. 7 1.4 Standard directory structure a less simplified view............................ 7 1.5 More details on the build process..............................................10 1.6 Multi-module software repository..............................................15 1.7 Dependencies conflict resolution...............................................17 1.8 Plug-ins..................................................................... 20 1.9 Properties *................................................................. 24 1.10 Other plug-ins *............................................................ 27 1.11 Default life-cycle for project s web site generation *........................... 30 1.12 Maven Versus Ant and Versus Make..........................................35 Coordinates 1.1 Artifact names and project relationships groupid : Group, company, team, organisation, project, or other group artifactid : A unique identification under the groupid representing a single project # 3 version : A snapshot in time of the project in question Version number = major.minor.bug fix-qualifier-build number packaging : Type of build life-cycle this project will encounter And sometimes classifier, e.g. linux, windows, etc. Three types of relationships between projects Dependency : This project requires another one Transitive dependencies : A dependency of a dependency Maven does not allow circular dependencies Parent : This project inherits some attributes from another project Télécom SudParis Denis Conan Décembre 2017 CSC4102 3

Pour aller plus loin : Programmation outillée 1 Construction de logiciel avec Maven Local repository : ~/.m2/repository 1.1.1 Local repository and snapshot versions groupid/artifactid/version/artifactid-version.packaging + a POM file describing meta-data, e.g. mainly dependencies # 4 A snapshot in Maven is an artifact that has been prepared using the most recent sources available Specifying a snapshot version for a dependency = Maven looks for new versions By default, on a daily basis -U command line option to force for updates To avoid a remote access to search for the latest snapshot : mvn -o clean install (-o for offline ) Specifying a non-snapshot version of a dependency = download that dependency only once 1.2 Life-cycle for jar packaging simplified # 5 1. process-resources : Copy files and filter variables maven-resources-plugin 2. compile : Compile project source code maven-compiler-plugin 3. process-test-resources : Copy non-source-code for unit tests maven-resources-plugin 4. test-compile : Compile unit-tests source code maven-compiler-pluging 5. test : Execute project unit tests maven-surefire-pluging 6. package : Create the jar of the project maven-jar-plugin 7. install : Install the jar into local Maven repository ~/.m2/repository maven-install-plugin 8. deploy : Deploy the jar into a remote Maven repository for web access maven-deploy-plugin Télécom SudParis Denis Conan Décembre 2017 CSC4102 4

Pour aller plus loin : Programmation outillée 1 Construction de logiciel avec Maven 1.3 Build life-cycles, phases and goals Build life cycle : Ordered sequence of phases One life cycle per package type Default, jar, pom, ejb, war, ear, etc., your technology-dependent ones # 6 Phase : A step in a build life cycle May have zero or more goals bound to it Executing a phase first execute all the preceding phases E.g., $ mvn install Goal : Maven unit of work bound to a phase Bound goals are run when their phases execute Plug-in : May contain several goals Executing a goal of a plug-in does not execute preceding phases goals $ mvn exec:java 1.4 Standard directory structure a less simplified view pom.xml : Maven POM (Project Object Model) file always at the top-level LICENSE.txt : License file is encouraged README.txt : Simple note to start with the project src/main/java : Source code of the project src/main/filters : Filters (properties files) of the project for the build # 7 src/main/resources : Project non-source code (resources) src/main/config : Configuration for compiling the sources src/main/assembly : Project assembly filters src/test/java : Source code of the unit tests src/test/resources : Non-source code (resources) of the unit tests src/test/filters : Resource filters of the unit tests src/site : Resources used to generate the web site target : Target for all generated output : classes, web site... Télécom SudParis Denis Conan Décembre 2017 CSC4102 5

1 Construction de logiciel avec Maven 1.5 More details on the build process 1.5 More details on the build process # 8 1.5.2 Exemplification with the JAR build life-cycle................................. 10 1.5.2 Life-cycle for jar packaging..................................................10 1.5.4 Default life-cycle........................................................... 12 1.5.4 Ways to manipulate build life-cycle *........................................ 12 1.5.1 Exemplification with the JAR build life-cycle PHASES process resources PLUGINS:GOALS resources:resources compile compiler:compile # 9 process test resources test compile resources:testresources compiler:test compile test surefire:test package jar:jar install install:install deploy deploy:deploy Télécom SudParis Denis Conan Décembre 2017 CSC4102 6

1 Construction de logiciel avec Maven 1.5 More details on the build process 1.5.2 Life-cycle for jar packaging # 10 1. process-resources : Copy files and filter variables maven-resources-plugin 2. compile : Compile project source code maven-compiler-plugin 3. process-test-resources : Copy non-source-code for unit tests maven-resources-plugin 4. test-compile : Compile unit-tests source code maven-compiler-pluging 5. test : Execute project unit tests maven-surefire-pluging 6. package : Create the jar of the project maven-jar-plugin 7. install : Install the jar into local Maven repository ~/.m2/repository maven-install-plugin 8. deploy : Deploy the jar into a remote Maven repository for web access maven-deploy-plugin 1.5.3 Default life-cycle 1. Validate 2. Generate-sources 3. Process-sources 12. Test-compile 13. Test 14. Prepare-package # 11 4. Generate-resources 5. Process-resources 6. Compile 7. Process-classes 8. Generate-test-sources 9. Process-test-sources 10. Generate-test-resources 11. Process-test-resources 15. Package 16. Pre-integration-test 17. Integration-test 18. Post-integration-test 19. Verify 20. Install 21. Deploy Télécom SudParis Denis Conan Décembre 2017 CSC4102 7

1 Construction de logiciel avec Maven 1.5 More details on the build process 1.5.4 Ways to manipulate build life-cycle * Five ways (not studied in this presentation, but cited here for the sake of completeness) # 12 1. Choose project package : pom, jar, ejb, etc. 2. Manually bind a goal to a phase in the POM E.g., choose surefire plug-in for executing tests 3. Write a plug-in and bind in the goal definition in the plug-in Java class 4. Create a forked life-cycle and execute it in a plug-in 5. Create your own packaging type with a custom default life-cycle Télécom SudParis Denis Conan Décembre 2017 CSC4102 8

1 Construction de logiciel avec Maven 1.6 Multi-module software repository 1.6 Multi-module software repository # 13 1.6.2 Aggregation in multi-module projects........................................ 15 1.6.2 POM file of a submodule................................................... 15 1.6.3 Dependency inheritance.....................................................16 1.6.1 Aggregation in multi-module projects Similar to virtual packages in GNU/Linux packaging Declaring a parent project = packaging pom # 14 helloworld/pom.xml <project> <groupid>eu.it-sudparis</groupid> <artifactid>helloworld</artifactid> <packaging>pom</packaging> <version>0.1-snapshot</version> <name>hello world example</name> <modules> <module>first-sub-module</module> <module>second-sub-module</module> </modules>... </project> mvn install copies pom.xml to ~/.m2/repository/helloworld/pom.xml Télécom SudParis Denis Conan Décembre 2017 CSC4102 9

1 Construction de logiciel avec Maven 1.6 Multi-module software repository 1.6.2 POM file of a submodule Declaring a parent module = inheriting parent configuration # 15 helloworld/first-sub-module/pom.xml <project> <parent> <groupid>eu.it-sudparis</groupid> <artifactid>helloworld</artifactid> <version>0.1-snapshot</version> </parent> <packaging>jar</packaging> <artifactid>first-sub-module</artifactid> <name>the first sub-module</name>... </project> mvn help:effective-pom displays the effective POM of a sub-module 1.6.3 Dependency inheritance # 16 Submodules inherit dependencies of parent modules + transitive dependencies 1. Inherit a version of a dependency from parent 2. Declare a version dependency and use it Use the dependency management section State only the preference for a version, do not affect the dependency graph <dependencymanagement> <dependencies> <dependency> <groupid>otherorg.proj</groupid> <artifactid>artifactapp</artifactid> <version>1.0.9</version> </dependency></dependencies></dependencymanagement> Declare that the dependency s usage, without any version number <dependency> <groupid>otherorg.proj</groupid> <artifactid>artifactapp</artifactid> </dependency> Télécom SudParis Denis Conan Décembre 2017 CSC4102 10

Pour aller plus loin : Programmation outillée 1 Construction de logiciel avec Maven 1.7 Dependencies conflict resolution # 17 Reasons for excluding transitive dependencies Current project requires an alternately named version = two copies of a different versioned project in the classpath Artifact unused Artifact provided by your runtime container An API which might have multiple vendors <dependency> <groupid>otherorg.proj</groupid> <artifactid>artifactapp</artifactid> <version>1.0.9</version> <exclusions> <exclusion> <groupid>otherorg.proj</groupid> <artifactid>otherartifactapp</artifactid> </exclusion></exclusions></dependency> Télécom SudParis Denis Conan Décembre 2017 CSC4102 11

1 Construction de logiciel avec Maven 1.8 Plug-ins 1.8 Plug-ins # 18 1.8.2 Compilation : mvn compile..................................................20 1.8.2 Unit tests : mvn test........................................................20 1.8.4 Installation (mvn install) and deployment (mvn deploy)....................... 22 1.8.4 Execution : mvn exec :java.................................................. 22 1.8.5 Eclipse : mvn eclipse :eclipse clean...........................................23 1.8.1 Compilation : mvn compile # 19 Allow JDK 5.0 source code <build><plugin><plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>2.0</version> <configuration> <source>1.5</source> <target>1.5</target> </configuration></plugin></plugins></build> Another JRE with a fork <configuration> <executable>/usr/.../javac</executable> <compilerversion>1.5</compilerversion> <fork>true</fork> </configuration> Other configuration elements, e.g. compiler arguments Télécom SudParis Denis Conan Décembre 2017 CSC4102 12

1 Construction de logiciel avec Maven 1.8 Plug-ins # 20 Surefire plug-in 1.8.2 Unit tests : mvn test <dependencies><dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.0</version> <scope>test</scope> </dependency></dependencies> By default, the following tests are included **/*Test.java **/Test*.java **/*TestCase.java The following tests are excluded **/Abstract*Test.java **/Abstract*TestCase.java Skip the tests using the command line option -Dmaven.test.skip=true 1.8.3 Installation (mvn install) and deployment (mvn deploy) # 21 Installation = local deployment in your local repository In the directory ~/.m2/repository Deployment = Internet deployment See for instance http://maven.objectweb.org/maven2 Télécom SudParis Denis Conan Décembre 2017 CSC4102 13

1 Construction de logiciel avec Maven 1.8 Plug-ins 1.8.4 Execution : mvn exec :java Plug-in org.codehaus.mojo:exec-maven-plugin in a profile # 22 <profiles> <profile> <id>run</id> <activation> <activebydefault>true</activebydefault> </activation> <build><plugins><plugin> <groupid>org.codehaus.mojo</groupid> <artifactid>exec-maven-plugin</artifactid> <executions> <execution> <goals><goal>java</goal></goals> <phase>runtime</phase> </execution></executions> <configuration> <mainclass>classwiththemain</mainclass> </configuration></plugin></plugins></build></profile></profiles> $ mvn exec:java 1.8.5 Eclipse : mvn eclipse :eclipse clean Maven plug-in for Eclipse # 23 From the POM file pom.xml Generation of.classpath and.project files mvn eclipse:eclipse To remove.classpath and.project files mvn eclipse:clean One Eclipse project per Maven module There exists an Eclipse plug-in for Maven http://m2eclipse.sonatype.org/sites/m2e Télécom SudParis Denis Conan Décembre 2017 CSC4102 14

Pour aller plus loin : Programmation outillée 1.9 Properties * 1 Construction de logiciel avec Maven env.x : Environment variable of the shell, e.g. ${env.path} # 24 project.x : Project element value, e.g. ${project.groupid} settings.x : Variables in configuration file settings.xml Java System Properties accessible via java.lang.system.getproperties() x : Property sets with POM element <properties> Télécom SudParis Denis Conan Décembre 2017 CSC4102 15

1 Construction de logiciel avec Maven 1.10 Other plug-ins * 1.10 Other plug-ins * # 25 1.10.2 Filtering resources : mvn process-resources *................................ 27 1.10.2 Packaging : mvn package.................................................. 27 1.10.1 Filtering resources : mvn process-resources * # 26 Filtering = Parse some files to fill value to be supplied at build time In pom.xml of the resource directory <properties><my.filter.value>hello</my.filter.value></properties> <build> <filters><filter>src/main/filters/build.properties</filter></filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resources></resources></build> In an external file (e.g., build.properties) or in the properties section of pom.xml Syntax ${property name}, e.g., application.name = ${project.name} In command line parameters ("-Dmy.prop=hello world!") It is possible to prevent some files (e.g., binary files) from filtering Télécom SudParis Denis Conan Décembre 2017 CSC4102 16

1 Construction de logiciel avec Maven 1.10 Other plug-ins * 1.10.2 Packaging : mvn package Include project classes in target/classes Include project resources in src/main/resources Insert a manifest automatically generated by Maven Insert a pom.xml and a pom.properties files # 27 To be self-describing and to utilise meta-data during project execution To override the manifest file, in pom.xml of the project do the following <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-jar-plugin</artifactid> <configuration> <archive> <manifestfile>src/meta/meta-inf/manifest.mf</manifestfile> </archive></configuration></plugin> Télécom SudParis Denis Conan Décembre 2017 CSC4102 17

1 Construction de logiciel avec Maven 1.11 Default life-cycle for project s web site generation * 1.11 Default life-cycle for project s web site generation * 1. mvn site : Generate all configured project reports maven-site-plugin # 28 2. site-deploy : Deploy the generated web site to the web server path specified in the POM distribution Management section maven-site-plugin Lots of web site reports : Javadoc, JXR (source code cross reference), Checkstyle/PMD (source code formatting rules), Tag list (track TODO items), Cobertura (unit test s and execution s coverage), Surefire Report (visual result of unit tests) Clirr (compare jars for binary compatibility), Changes, etc. 1.11.1 Site descriptor * In file src/site/site.xml bannerleft and bannerright : Appearance of the banner skin : Skin used for the site # 29 publishtdate : Format of the published date body/links : Links displayed below the banner body/head : Meta-data to be fed into the <head> element body/menu : Menu items displayed in the navigation column body/${reports} : To control which project reports are displayed in the web site Télécom SudParis Denis Conan Décembre 2017 CSC4102 18

1 Construction de logiciel avec Maven 1.11 Default life-cycle for project s web site generation * 1.11.2 Web site reports * Javadoc : API reference from Javadoc JXR : Source code cross reference for any Java code Checkstyle : Check source code against formatting rules PMD : Checks source code against known rules for code smells (overlap with Checkstyle) # 30 CPD : Checks for duplicate source code blocks (copy/paste) (part of PMD) Tag list : Outstanding tasks or other markers (track TODO items) Cobertura : Analyse code statement coverage during unit tests or code execution Help in identifying untested or unused source code blocks Surefire Report : Show the result of unit tests visually Clirr : Compare two versions of a jar for binary compatibility Changes : Produce release notes and road maps from issue tracking systems 1.11.3 Helping * help:active-profiles lists the profiles which are currently active for the build help:effective-pom displays the effective POM for the current build, with the active profiles factored in # 31 help:effective-settings prints out the calculated settings for the project Any profile enhancement The inheritance of the global settings into the user-level settings help:describe describes the attributes of a plug-in help:describe -Dplugin=compiler help:describe -Dplugin=compiler -Dfull For discovering all of the goals of a plug-in as well as their parameters Télécom SudParis Denis Conan Décembre 2017 CSC4102 19

1 Construction de logiciel avec Maven 1.11 Default life-cycle for project s web site generation * # 32 1.11.4 More on plug-ins * The Maven command mvn aname:agoal executes the plug-in named Either maven-aname-plugin or aname-maven-plugin Plug-ins are configured in POM files under the <build> element 1. Configuring a plug-in or a goal already in the life-cycle <build><plugins><plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-jar-plugin</artifactid> <configuration>...use properties declared by the plug-in... </configuration> 2. Plug-in or goal not in the life-cycle, e.g. mvn antrun:run 4. The same as before + conditional execution <build><plugins><plugin> <artifactid>maven-antrun-plugin</artifactid> <configuration><tasks><echo>home: $env.java_home</echo></tasks></configuration> 3. The same as before, but bound to a phase : <execution><goal> elements Télécom SudParis Denis Conan Décembre 2017 CSC4102 20

1 Construction de logiciel avec Maven 1.12 Maven Versus Ant and Versus Make 1.12 Maven Versus Ant and Versus Make # 33 1.12.2 Ant beyond make-like tools................................................ 35 1.12.2 Maven beyond Ant........................................................ 35 # 34 Ant is natively-integrated to Eclipse IDE 1.12.1 Ant beyond make-like tools Make was a marked improvement over shell script Abstraction of specific shell commands into a more general and consistent syntax Determines automatically which pieces of a large program need to be rebuilt and issues the commands But... Make mainly/historically targets the language C et C++ Implicit rules and pattern rules Execute make -p in a directory with no Makefile Default suffixes :.out.a.ln.o.c.cc.c.cpp.p.f.f.r.y.l.s.s.mod.sym.def.h.info.dvi.tex.texinfo.texi.txinfo, etc. Make mainly/historically targets Unix-like operating systems Thus... Machine-specific aspects of Make = less portable than the code to build Ant builds software across multiple platforms with plug-ins for Java Télécom SudParis Denis Conan Décembre 2017 CSC4102 21

1 Construction de logiciel avec Maven 1.12 Maven Versus Ant and Versus Make # 35 1.12.2 Maven beyond Ant Encompass build activities : compilation, documentation, distribution, deployment Declarative model for software projects : Project Object Model (POM) Reuse of build logic and default strategies for the most common tasks Tools/plug-ins that interact with the declarative model There already exists a very long list of such plug-ins Access to all the Ant tasks through the plug-ins maven-ant-plugin and maven-antrun-plugin You can provide your own plugins for your own technology Organisation of dependencies Management the of JAR hell Management the of plug-in hell Written in Java, dedicated for writing in Java Maven is integrated to IDEs like Eclipse This presentation is for Maven 2 New functionalities in Maven 3 : parallel build for multicores, decoupling, etc. Télécom SudParis Denis Conan Décembre 2017 CSC4102 22