38
Produced by Department of Computing, Maths & Physics Waterford Institute of Technology http://www.wit.ie http://elearning.wit.ie Agile Software Development Eamonn de Leastar ([email protected])

Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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])

Page 2: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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

Page 3: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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

Page 4: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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>

Page 5: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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

Page 6: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

Manipulate the project in eclipse...

• Copy Paste sources from original project into maven generated project.

6

Reference errors - project is missing ‘Referenced Libraries’

Page 7: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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>

Page 8: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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>

Page 9: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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>

Page 10: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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>

Page 11: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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

Page 12: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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

Page 13: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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>

Page 14: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

Design View (Eclipse XML Editor)

14

Page 15: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

Eclipse Maven Support (via plugin)

15

Page 16: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

Dependency Hierarchy

• Shows ‘implicit’ dependencies

• hamcrest, xmlpull, xpp3_min

16

Page 17: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

Supported Libraries

• junit, guava and xstream are all under active development, and latest versions are deposited in public maven repositories

17

Page 18: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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

Page 19: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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

Page 20: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external 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

Page 21: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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

Page 22: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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>

Page 23: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

Validate

• Validate the project is correct and all necessary information is available

23

Page 24: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

Compile

• compile the source code of the project

24

Page 25: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

Test

• test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed

25

Page 26: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

Package

• take the compiled code and package it in its distributable format, such as a JAR.

26

Page 27: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

• install the package into the local repository, for use as a dependency in other projects locally

27

Install

Page 28: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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

Page 29: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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

Page 30: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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>

Page 31: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

Eclipse Variable Definition

31

Page 32: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

Install

• Copies the generated package to the local Maven repository

32

mvn install

Page 33: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

<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

Page 34: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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

Page 35: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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

Page 36: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

36

Page 37: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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.

Page 38: Agile Software Developmentedeleastar.github.io/agile-software-dev/topic06/... · pacemaker-console • Take the pacemaker-console (java) project • Note the external dependencies:

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/