Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
Produced by
Department of Computing, Maths & PhysicsWaterford Institute of Technologyhttp://www.wit.ie
http://elearning.wit.ie
Agile Software Development
Eamonn de Leastar ([email protected])
pacemaker-console
• Take the pacemaker-console (java) project
• Note the external dependencies:
• guava-14.0.1.jar
• xstream-1.4.4.jar
• junit-4.11.jar
• asg.cliche-11-413.jar
2
Project Creation Archetype
• From the command line, execute maven command to create a project skeleton structure:
3
mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=pacemaker -DartifactId=pacemaker-console-maven
Generated Directory Structure• The generated directory structure contains two
dummy java files that can be discarded
• It also generates a POM, which is the basis for the project dependency structure.
4
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>pacemaker</groupId> <artifactId>pacemaker-console-maven</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging>
<name>pacemaker-console-maven</name> <url>http://maven.apache.org</url>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies></project>
Generate ‘Eclipse’ project
• Generates the ‘.project’ and ‘.classpath’ Eclipse uses to specify project name, structure and dependencies.
• The project can then be ‘imported’ into eclipse
5
mvn eclipse:eclipse
Manipulate the project in eclipse...
• Copy Paste sources from original project into maven generated project.
6
Reference errors - project is missing ‘Referenced Libraries’
Default POM
7
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>pacemaker</groupId> <artifactId>pacemaker-console-maven</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging>
<name>pacemaker-console-maven</name> <url>http://maven.apache.org</url>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies></project>
url + version
8
<project...> <modelVersion>4.0.0</modelVersion>
<groupId>pacemaker</groupId> <artifactId>pacemaker-console-maven</artifactId> <version>1.0</version> <packaging>jar</packaging>
<name>pacemaker-console-maven</name> <url>http://www.wit.ie</url>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies></project>
<version>1.0</version> <url>http://www.wit.ie</url>
Java 7 Support + ‘rev’ Junit to 4.11
9
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties>
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
10
<project ...>
<groupId>pacemaker</groupId> <artifactId>pacemaker-console-maven</artifactId> <version>1.0</version> <packaging>jar</packaging>
<name>pacemaker-console-maven</name> <url>http://www.wit.ie</url>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> </project>
Dependencies
• Junit installed
• Need to incorporate
• guava
• xstream
• and also
• asg.cliche
• what about
• hamcrest-core?
11
• Well supported, maintained components:
• xstream, guava
• abandoned, legacy?
• asg.cliche
• Downstream dependency of junit
• hamcrest-core
Dependency entries:
12
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>15.0</version> </dependency>
<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.4</version> </dependency> <dependency> <groupId>asg-cliche</groupId> <artifactId>asg-cliche</artifactId> <version>1.0</version> </dependency> </dependencies>
• Junit
• guava
• xstream
• asg.cliche
junit ‘depends on’ hamcrest’, and including junit will automatically incorporate hamcrest
into build
Complete POM
• Project identifiers
• Project version
• Language version
• Dependencies
13
<project ...> <groupId>pacemaker</groupId> <artifactId>pacemaker-console-maven</artifactId> <version>1.0</version> <packaging>jar</packaging>
<name>pacemaker-console-maven</name> <url>http://www.wit.ie</url>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>15.0</version> </dependency>
<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.4</version> </dependency> <dependency> <groupId>asg-cliche</groupId> <artifactId>asg-cliche</artifactId> <version>1.0</version> </dependency> </dependencies></project>
Design View (Eclipse XML Editor)
14
Eclipse Maven Support (via plugin)
15
Dependency Hierarchy
• Shows ‘implicit’ dependencies
• hamcrest, xmlpull, xpp3_min
16
Supported Libraries
• junit, guava and xstream are all under active development, and latest versions are deposited in public maven repositories
17
Unsupported Libraries
• asg-cliche is not under active development, and is not in any public maven repo.
• To keep our build consistent, we install asg-cliche in our local repo:
• Our maven build will find it locally, and resolve to that version without searching further.
18
mvn install:install-file -Dfile=asg-cliche-1.0.jar -DgroupId=asg-cliche -DartifactId=asg-cliche -Dversion=1.0 -Dpackaging=jar
Regenerate Eclipse Version
• On command line, instruct maven to refresh the eclipse project
19
mvn eclipse:eclipse
This will now include dependancies, including inferred
upstream dependencies
Maven Lifecycles• Maven is based around the central concept of a build lifecycle - a
clearly defined process for building and distributing a particular artifact
• Only necessary to learn a small set of commands to build any Maven project, and the POM will ensure correct execution
• There are three built-in build lifecycles:
• default: handles your project deployment
• clean: handles project re-initialization/clean up
• site. handles the creation of the project's documentation
20
Maven Default Lifecycle
• Each of these build lifecycles is defined by a different list of build phases, wherein a build phase represents a stage in the lifecycle.
• For example, the default lifecycle has the following build phases (for a complete list of the build phases, refer to the Lifecycle Reference):• validate • compile• test • package • integration-test• verify• install• deploy
21
pacemaker
• Validate
• Compile
• Test
• Package
• Install
22
<project ...> <groupId>pacemaker</groupId> <artifactId>pacemaker-console-maven</artifactId> <version>1.0</version> <packaging>jar</packaging>
<name>pacemaker-console-maven</name> <url>http://www.wit.ie</url>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>15.0</version> </dependency>
<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.4</version> </dependency> <dependency> <groupId>asg-cliche</groupId> <artifactId>asg-cliche</artifactId> <version>1.0</version> </dependency> </dependencies></project>
Validate
• Validate the project is correct and all necessary information is available
23
Compile
• compile the source code of the project
24
Test
• test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
25
Package
• take the compiled code and package it in its distributable format, such as a JAR.
26
• install the package into the local repository, for use as a dependency in other projects locally
27
Install
Maven & Eclipse
• The projects is now built entirely by the maven build system. However, we can continue to use Eclipse for day to day development.
• To do this, we generate an eclipse project from the maven project structure. Do this by issuing the following maven command:
mvn eclipse:eclipse
28
Eclipse Project Structure
• This will have produced the required .classpath and .project files in the pim directory. You can now import this project into eclipse using the normal import->project menus.
• Although will import successfully, it will not build
29
Eclipse .classpath and .project files
30
<classpath> <classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/> <classpathentry kind="src" path="src/main/java" including="**/*.java"/> <classpathentry kind="output" path="target/classes"/> <classpathentry kind="var" path="M2_REPO/asg-cliche/asg-cliche/1.0/asg-cliche-1.0.jar"/> <classpathentry kind="var" path="M2_REPO/com/google/guava/guava/15.0/guava-15.0.jar"/> <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar"/> <classpathentry kind="var" path="M2_REPO/junit/junit/4.11/junit-4.11.jar"/> <classpathentry kind="var" path="M2_REPO/xmlpull/xmlpull/1.1.3.1/xmlpull-1.1.3.1.jar"/> <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/> <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.4.4/xstream-1.4.4.jar"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/></classpath>
<projectDescription> <name>pacemaker-console-maven</name> <projects/> <buildSpec> <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> </buildCommand> </buildSpec> <natures> <nature>org.eclipse.jdt.core.javanature</nature> </natures></projectDescription>
Eclipse Variable Definition
31
Install
• Copies the generated package to the local Maven repository
32
mvn install
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>15.0</version> </dependency>
<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.4</version> </dependency> <dependency> <groupId>asg-cliche</groupId> <artifactId>asg-cliche</artifactId> <version>1.0</version> </dependency> </dependencies>
Dependencies also in Repositories
33
Launch Script - Unix
• Maven Repository
• Classpath for pacemaker
• Launch Command
34
M2_REPO=/Users/edeleastar/.m2/repository
export CLASSPATH=%CLASSPATH%:\${M2_REPO}/pacemaker/pacemaker-console-maven/1.0/pacemaker-console-maven-1.0.jar:\${M2_REPO}/com/thoughtworks/xstream/xstream/1.4.4/xstream-1.4.4.jar:\${M2_REPO}/com/google/guava/guava/15.0/guava.15.0.jar:\${M2_REPO}/asg-cliche/asg-cliche/1.0/asg-cliche-1.0.jar
java controllers.Main
Launch Script - Windows
35
set CLASSPATH=%CLASSPATH%;%~f1
cppappend.bat
echo offset M2_REPO=C:/docume1/eamonn1/.m2/repository
set CLASSPATH=call cpappend.bat "%M2_REPO%/pacemaker/pacemaker-console-maven/1.0/pacemaker-console-maven-1.0.jar;"call cpappend.bat "%M2_REPO%/com/thoughtworks/xstream/xstream/1.4.4/xstream-1.4.4.jar;"call cpappend.bat "%M2_REPO%/com/google/guava/guava/15.0/guava.15.0.jar;"call cpappend.bat "%M2_REPO%/asg-cliche/asg-cliche/1.0/asg-cliche-1.0.jar;"
java controllers.Main
• Maven Repository
• Classpath for pacemaker
• Launch Command
36
37
Comment by XXXX, May 2, 2013
I found the Maven android plugin on several plugin collection page, so I thought this will be a resource I should use, but I gave up, because I didn't even found out what is this in a few minutes. You should really write at least one paragraph about this project for the newbies like me. I am not too lazy to put time in learning, but I will not spend time for something which has no real documentation, and I will presume there is none, if I didn't found out what is this on the project homepage.
Except where otherwise noted, this content is licensed under a Creative Commons Attribution-NonCommercial 3.0 License.
For more information, please see http://creativecommons.org/licenses/by-nc/3.0/