Maven project automation for dummies

translatoryazooInternet and Web Development

Nov 12, 2013 (3 years and 11 months ago)

69 views



















































































































































































































1

dec 20, 2007

Maven project automation for dummies

Aino Andriessen

AMIS



















































































































































































































2

dec 20, 2007

Continuous Integration


Continuous integration is the practice where
the work of all the developers are integrated,
analyzed and verified on a regular basis,
preferably multiple times a day.


It takes the latest situation from the source
control system, performs
unit tests
, makes a
build
,
deploy
s the application, performs
integration tests

and creates
reports

about
these steps and
communicates

them with the
team, all automatically without human
interaction.



















































































































































































































3

dec 20, 2007

Conditions


Infrastructure


Scripting



No IDE



















































































































































































































4

dec 20, 2007

Scripting


Maven


ant


make


shell scripts


sql scripts


...




















































































































































































































5

dec 20, 2007

Demo




















































































































































































































6

dec 20, 2007

Maven execution info

[INFO] Scanning for projects...

[INFO] Reactor
build order
:

[INFO] HR1

[INFO] HR1 model

[INFO] HR1 viewController

[INFO] HR1 ear

[INFO] HR1 integration

[INFO]
-------------------------


Downloading
: http://repo1.maven.org/maven2/junit/junit/3.8.1/junit
-
3.8.1.jar

118K downloaded


[INFO]

[INFO]
------------------------------------------------------------------------

[INFO] Reactor Summary:

[INFO]
------------------------------------------------------------------------

[INFO] HR1 ................................................... SUCCESS [3.003s]

[INFO] HR1 model ............................................. SUCCESS [7.866s]

[INFO] HR1 viewController .................................... SUCCESS [54.451s]

[INFO] HR1 ear ............................................... SUCCESS [14.591s]

[INFO] HR1 integration ....................................... SUCCESS [0.312s]

[INFO]
------------------------------------------------------------------------

[INFO]
------------------------------------------------------------------------

[INFO]
BUILD SUCCESSFUL

[INFO]
------------------------------------------------------------------------

[INFO] Total time: 1 minute 20 seconds

[INFO] Finished at: Fri Jun 01 17:32:01 CEST 2007

[INFO] Final Memory: 10M/18M

[INFO]
------------------------------------------------------------------------



















































































































































































































7

dec 20, 2007

mvn test

[INFO] [surefire:test]

[INFO] Surefire report directory: D:
\
projects
\
myprojects
\
odtugDemo
\
hr1
\
model
\
tar

get
\
surefire
-
reports

-------------------------------------------------------


T E S T S

-------------------------------------------------------

Running nl.amis.demo.odtug.model.queries.OdtugTstViewTest

Jun 1, 2007 7:04:22 PM oracle.adf.share.config.ADFConfigFactory findOrCreateADFC

onfig

INFO: oracle.adf.share.config.ADFConfigFactory No META
-
INF/adf
-
config.xml found

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.606 sec

Running nl.amis.demo.odtug.model.queries.RegionsViewTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 sec

Running nl.amis.adf.fwk.test.Java5Test

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec

Running nl.amis.demo.odtug.model.queries.JobsViewTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.046 sec

Running nl.amis.demo.odtug.model.queries.EmployeesViewTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.032 sec

Running nl.amis.demo.odtug.model.queries.DepartmentsViewTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 sec

Running nl.amis.demo.odtug.model.queries.LocationsViewTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec

Running nl.amis.demo.odtug.model.queries.CountriesViewTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 sec


Results :


Tests run: 8, Failures: 0, Errors: 0, Skipped: 0



















































































































































































































8

dec 20, 2007

mvn package


[INFO] Building HR1

[INFO] task
-
segment: [package]

[INFO]
---------------------------


[INFO] [jar:jar]

[INFO]
Building

jar: D:
\
projects
\
myprojects
\
odtugDemo
\
hr1
\
model
\
target
\
hr1
-
model
-
1.0
-
SNAPSHOT.jar

[INFO]
-------------------------------------------------------------------------


[INFO] [war:war]

[INFO]
Building
war: D:
\
projects
\
myprojects
\
odtugDemo
\
hr1
\
viewController
\
target
\
hr1
-
viewController
-
1.0
-
SNAPSHOT.war


[INFO] [ear:ear]

[INFO]
Copying
artifact[war:nl.amis.demo.odtug.hr1:hr1
-
viewController:1.0
-
SNAPSHOT] to[
hr1
-
viewController
-
1.0
-
SNAPSHOT.war
]

[INFO] Copying artifact[jar:log4j:log4j:1.2.12] to[log4j
-
1.2.12.jar]

[INFO] Copying artifact[jar:commons
-
logging:commons
-
logging:1.0.4] to[commons
-
logging
-
1.0.4.jar]

[INFO] Could not find manifest file: D:
\
projects
\
myprojects
\
odtugDemo
\
hr1
\
ear
\
src
\
main
\
application
\
META
-
INF
\
MANIFEST.MF
-

Generating one

[INFO]
Building
jar: D:
\
projects
\
myprojects
\
odtugDemo
\
hr1
\
ear
\
target
\
hr1
-
ear
-
1.0
-
SNAPSHOT.ear

[INFO]
-------------------------------------------------------------------------



















































































































































































































9

dec 20, 2007

mvn exec:exec
-
PlocalOC4J

[INFO] [exec:exec]

[[INFO] 07/06/01 17:21:22 Notification ==>
Uploading file hr1.ear

...

[INFO]

[INFO] 07/06/01 17:21:22 Notification ==>
Application Deployer for hr1 STARTS.

[INFO]

[INFO] 07/06/01 17:21:22 Notification ==>Copy the archive to :
\
server
\
oc4j_101310
\
j2ee
\
home
\
applications
\
hr1.ear

[INFO]

[INFO] 07/06/01 17:21:22 Notification ==>Initialize C:
\
server
\
oc4j_101310
\
j2ee
\
home
\
applications
\
hr1.ear begins...


[INFO]

[INFO] 07/06/01 17:21:24 Notification ==>Initialize hr1
-
viewController
-
1.0
-
SNAPSHOT begins...

[INFO]

[INFO] 07/06/01 17:21:24 Notification ==>Initialize hr1
-
viewController
-
1.0
-
SNAPSHOT ends...

[INFO]

[INFO] 07/06/01 17:21:24 Notification ==>
Started application : hr1

[INFO]

[INFO] 07/06/01 17:21:24 Notification ==>Binding web application(s) to site default
-
web
-
site begins...

[INFO]

[INFO] 07/06/01 17:21:24 Notification ==>Binding hr1
-
viewController
-
1.0
-
SNAPSHOT web
-
module for application
hr1 to site default
-
web
-
site under context root /hr1

[INFO]

[INFO] 07/06/01 17:21:31 Notification ==>Initializing Servlet: javax.faces.webapp.FacesServlet for web application
hr1
-
viewController
-
1.0
-
SNAPSHOT

[INFO]

[INFO] 07/06/01 17:21:31 Notification ==>Binding web application(s) to site default
-
web
-
site ends...

[INFO]

[INFO] 07/06/01 17:21:31 Notification ==>
Application Deployer for hr1 COMPLETES
.


Operation time: 8273 msecs



















































































































































































































10

dec 20, 2007

mvn verify
-
PlocalOC4J




















































































































































































































11

dec 20, 2007

mvn deploy

[INFO] [deploy:deploy]

[INFO]
Retrieving previous build number

from ATAMaven2SnapshotsRepo

Uploading: file
:
\
\
amis
-
test
-
aa
\
maven2snapshots/nl/amis/demo/odtug/hr1/hr1
-
model/1.0
-
SNAPSHOT/hr1
-
model
-
1.0
-
20070601.171522
-
4.jar

50K uploaded

[INFO]
Retrieving

previous
metadata

from ATAMaven2SnapshotsRepo


[INFO]
Uploading

repository
metadata

for: 'snapshot nl.amis.demo.odtug.hr1:hr1
-
model:1.0
-
SNAPSHOT'

[INFO]
-------------------------------------------------------------------------



















































































































































































































12

dec 20, 2007

mvn site



















































































































































































































13

dec 20, 2007

Build automation server



















































































































































































































14

dec 20, 2007

Demo Summary


ADF Faces application


Tasks


Unittesting


Make a build


Deploy ear file to OC4J


Perform integrationtests


Share artifacts


Share information



Without manual intervention and JDeveloper !



















































































































































































































15

dec 20, 2007

Infrastructure



















































































































































































































16

dec 20, 2007

Software Studio



















































































































































































































17

dec 20, 2007

Software development


The development environment


Source control


Delivery environments


Issue management


Library management


Build automation

/
continuous integration


Reporting and documentation


Communication



















































































































































































































18

dec 20, 2007

Nightly build


Continuum


Scheduler


http://ci.amis.nl:8080/continuum/servlet/continuum



















































































































































































































19

dec 20, 2007

'Scripting' with Maven



















































































































































































































20

dec 20, 2007

Maven

Project Object Model


Project objects


xml file

Build Lifecycle


actions / goals (tasks)



Dependency (library, artifact) Management


Reporting and Documentation


...



















































































































































































































21

dec 20, 2007


Convention





over






configuration



















































































































































































































22

dec 20, 2007

POM example

<project>


<modelVersion>4.0.0</modelVersion>


<groupId>nl.amis.demo.odtug.hr1</groupId>


<
artifactId
>hr1</artifactId>


<
version
>1.0
-
SNAPSHOT</version>


<packaging>pom</packaging>


<modules>


<module>model</module>


<module>viewController</module>


<module>ear</module>


</modules>


<
name
>HR1</name>


<description>This application manages employees and general company
information.</description>


<url>http://localhost:8800/hr1/faces/index.jspx</url>


<organization>


<name>AMIS Services</name>


<url>http://www.amis.nl</url>


</organization>


<
issueManagement
>


<system>Jira</system>


<url>http://dev.amis.nl/jira/browse/PAG</url>


</issueManagement>




















































































































































































































23

dec 20, 2007

POM example


<
scm
>


<connection>scm:svn:http://subversion.amis.nl/users/aino_a/hr1/trunk/


</connection>


<developerConnection>


scm:svn:http://subversion.amis.nl/users/aino_a/hr1/trunk/


</developerConnection>


<url>http://subversion.amis.nl/users/aino_a/hr1/trunk/</url>


</scm>


<
developers
>


<developer>


<id>aino.andriessen</id>


<name>Aino Andriessen</name>


<email>aino.andriessen@amis.nl</email>


<organization>AMIS</organization>


<roles><role>developer</role></roles>


<timezone>+1</timezone>


</developer>


</developers>


<distributionManagement>


<
repository
>


<id>AMISMaven2Repo</id>


<url>file:
\
\
ci.amis.nl
\
maven2</url>


</repository>


</distributionManagement>



















































































































































































































24

dec 20, 2007

Pom Example


<build>


<plugins>


<plugin>


<groupId>org.apache.maven.plugins</groupId>


<artifactId>
maven
-
compiler
-
plugin
</artifactId>


<configuration>


<source>1.6</source>


<target>1.6</target>


</configuration>


</plugin>


</plugins>


</build>


<
reporting
>


<plugins>


<plugin>


<groupId>org.apache.maven.plugins</groupId>


<artifactId>maven
-
checkstyle
-
plugin</artifactId>


<configuration>


<configLocation>


src/main/resources/amis_checkstyle.xml


</configLocation>


</configuration>


</plugin>


</plugins>


</reporting>

</project>



















































































































































































































25

dec 20, 2007

Build Lifecycle


Organized sequence of phases
like compile, test, package, build
etc. The actual work is done by
goals which are bound to a
certain phase.


Configuration (if necessary) in
pom


Other lifecycles


clean


site

validate

generate
-
sources

process
-
sources

generate
-
resources

process
-
resources

compile

process
-
classes

generate
-
test
-
sources

process
-
test
-
sources

generate
-
test
-
resources

process
-
test
-
resources

test
-
compile

test

prepare
-
package

package

pre
-
integration
-
test

integration
-
test

post
-
integration
-
test

verify

install

deploy



















































































































































































































26

dec 20, 2007

Execution


mvn compile


mvn compile:compile


mvn compile:test
-
compile


mvn package


mvn jar


mvn jar:jar


mvn jar:sign


mvn test
-
jar:jar



















































































































































































































27

dec 20, 2007

Plugins


All 'tasks' are plugins


Written in java, ant



















































































































































































































28

dec 20, 2007

Dependency Management


Defined in the POM


Downloaded from repository when needed


Stored in local repository

<dependencies>


<dependency>


<
groupId
>junit</groupId>


<
artifactId
>junit</artifactId>


<
version
>3.8.1</version>


<
scope
>test</scope>


</dependency>


<dependency>


<groupId>com.oracle.adf</groupId>


<artifactId>adfbinding</artifactId>


<version>10.1.3.39.84</version>


<scope>provided</scope>


</dependency>


<dependency>


<groupId>nl.amis.demo.odtug.hr1</groupId>


<artifactId>hr1
-
model</artifactId>


<version>${project.version}</version>


</dependency>

</dependencies>



















































































































































































































29

dec 20, 2007

Maven repositories



















































































































































































































30

dec 20, 2007

Maven repositories 2


Local


Internal


Central


http://repo1.maven.org/maven2/


External


Codehaus


java.net


...



















































































































































































































31

dec 20, 2007

Internal repository


commercial libraries


non
-
public libraries


company products



















































































































































































































32

dec 20, 2007

AMIS internal repositories


http://ci.amis.nl/maven2/



http://ci.amis.nl/maven2snapshots/





















































































































































































































33

dec 20, 2007

Deploy


Upload the (created) artifact to the internal
repository



mvn deploy:deploy
-
file


deploy a library tot the repository

call mvn deploy:deploy
-
file


-
DgroupId=com.oracle.jdbc


-
DartifactId=ojdbc14


-
Dversion=10.2.0.1


-
Dfile=ojdbc14.jar


-
Dpackaging=jar


-
DrepositoryId=AMISMaven2Repository


-
Durl=
file
:
\
\
ci.amis.nl
\
maven2



















































































































































































































34

dec 20, 2007

Snapshots


Dependency management for development
'releases'.



















































































































































































































35

dec 20, 2007

Testing


Unittests


JUnit


TestNG


Integration tests


Database tests


...



















































































































































































































36

dec 20, 2007

Integration tests


Start application server


Prepare the database


Deploy application


Run tests


Undeploy application


Stop application server



















































































































































































































37

dec 20, 2007

Integration tests


Front
-
end


Selenium


JMeter


Back
-
end / Database


QCTO


utPLSQL


Tools


dbunit


Maven sql plugin


Maven exec plugin


(JDeveloper) ant tasks



















































































































































































































38

dec 20, 2007

Release


mvn release:prepare


update version


tag in scm


mvn release:perform


deploy tagged version


artifact


sources


doc


create and deploy file



















































































































































































































39

dec 20, 2007

Maven projectsites


Documentation


Project info


Reports


http://ci.amis.nl/projectsites/



















































































































































































































40

dec 20, 2007

Maven 'bits and pieces'


Reports


Profiles


Archetype


Cargo plugin


Multi module projects


...




















































































































































































































41

dec 20, 2007

ADF & JDeveloper & Maven




















































































































































































































42

dec 20, 2007

Mavenize an ADF application


Dependency management


Crete or generate POM files


Tools




















































































































































































































43

dec 20, 2007

Tools


admin_client.jar utility


deployment to OC4J


ojspc.jar utility


pre compilation of jsf files


[JDeveloper]


[oc4j]



















































































































































































































44

dec 20, 2007

JDeveloper library management


JDeveloper has a great library management
system...


as long as you stay in JDeveloper


as long as you use the provided libraries





















































































































































































































45

dec 20, 2007

Dependencies


Put (deploy) libraries in the internal repository


Keep pom file(s) in sync





<dependencies>


<dependency>


<groupId>com.oracle.adf</groupId>


<artifactId>adfshare</artifactId>


<version>10.1.3.41.57</version>


<scope>provided</scope>


</dependency>

</dependencies>

call mvn deploy:deploy
-
file


-
DgroupId=com.oracle.adf


-
DartifactId=adfshare


-
Dversion=%ADF_VERSION%


-
Dfile=%JDEV_HOME%/BC4J/lib/adfshare.jar


-
Dpackaging=jar


-
DrepositoryId=%REPO_ID%


-
Durl=%REPO_URL%



















































































































































































































46

dec 20, 2007

Required libraries


ADF


adfshare, adfui, adf
-
controller, adfbinding, adfm, bc4jdomorcl,
bc4jmt, bc4jct, bc4jdatum, bc4jhtml, datatags, graphtags,
bc4jimdomains, ordim


jhsadfrt, sqlj runtime


JDeveloper



oc4j
-
internal, oc4j, adf
-
faces
-
impl, adf
-
faces
-
api, jdev
-
cm, ojmisc,
xmlparserv2, ojsp, ojsputil


Other


sun collections 1.1, apache commons



Note : do NOT include log4j

JDev

ADF

10.1.3.0

10.1.3.36.73

10.1.3.1

10.1.3.39.84

10.1.3.2

10.1.3.40.66

10.1.3.3

10.1.3.41.57



















































































































































































































47

dec 20, 2007

Application / Project organisation


Directory layout


Default Maven layout


JDev project settings




Application with multiple projects



















































































































































































































48

dec 20, 2007

ADF Archetype


AMIS maven
-
archetype
-
adf :


mvn archetype:create


-
DarchetypeGroupId=nl.amis.maven.archetypes


-
DarchetypeArtifactId=maven
-
archetype
-
adf


-
DarchetypeVersion=10.1.3.3[
-
SNAPSHOT]


-
DremoteRepositories=http://ci.amis.nl/maven2(snapshots)


-
DgroupId=nl.amis.demo


-
DartifactId=hr1



















































































































































































































49

dec 20, 2007

Projectfile generation


Create jws and jpr files


myFaces
-

Trinidad JDev plugin


org.apache.myfaces.trinidadbuild.maven
-
jdev
-
plugin


version 1.2.5


Execute :
mvn jdev:jdev



http://technology.amis.nl/blog/?p=1279



















































































































































































































50

dec 20, 2007

Deploy to OC4J


Command
-
line


oc4j admin_client.jar utility


in ear project or associated with a certain
phase


mvn exec:exec
-
PlocalOC4J




Unfortunately no Cargo plugin


cargo:start, cargo:stop, cargo:deploy


Define local dependencies (location of
admin_client.jar) in local settings.xml



















































































































































































































51

dec 20, 2007

Example

<plugin>


<groupId>org.codehaus.mojo</groupId>


<artifactId>exec
-
maven
-
plugin</artifactId>


<executions>


<execution>


<id>deployApp</id>


<phase>pre
-
integration
-
test</phase>


<goals>


<goal>exec</goal>


</goals>


<configuration>


<executable>${java.home}/bin/java</executable>


<arguments>


<argument>
-
jar</argument>


<argument>${oc4j.adminclient.home}
\
j2ee
\
home
\
admin_client.jar
</argument>


<argument>${ias.deploy.url}</argument>


<argument>${ias.username}</argument>


<argument>${ias.password}</argument>


<argument>
-
deploy
</argument>


<argument>
-
file</argument>


<argument>../ear/target/hr1
-
ear
-
${version}.ear</argument>


<argument>
-
deploymentName</argument>


<argument>hr1</argument>


<argument>
-
bindAllWebApps</argument>


</arguments>


</configuration>


</execution>


</executions>

</plugin>

java
-
jar C:
\
server
\
oc4j_101310
\
j2ee
\
home
\
admin_client.jar


deployer:oc4j:localhost


oc4jadmin oc4jadmin


-
deploy
-
file hr1
-
ear
-
1.0
-
SNAPSHOT.ear


-
deploymentName hr1
-
bindAllWebApps

<profile>


<id>devOC4J</id>


<activation>


<activeByDefault>false</activeByDefault>


</activation>


<properties>


<ias.server.url>ci.amis.nl</ias.server.url>


<ias.server.port>8888</ias.server.port>


<ias.deploy.url>deployer:oc4j:${ias.server.url}</ias.deploy.url>


<ias.username>oc4jadmin</ias.username>


<ias.password>oc4jadmin</ias.password>


</properties>

</profile>



















































































































































































































52

dec 20, 2007

Running Maven from JDeveloper


Waiting for a JDeveloper extension ;
-
)


Ant tasks as wrapper



















































































































































































































53

dec 20, 2007

Installation of Maven


http://maven.apache.org/download.html


Unzip


Environment settings : M2_HOME , PATH


mvn
-
verify


settings.xml


<M2_HOME>/conf/ or <user.dir>/.m2/


[local repository]


servers


credentials


internal repositories


local configurations


oc4j installation



















































































































































































































54

dec 20, 2007

Conclusion


Continuous integration is essential for the
development process!



Using Maven, ADF Faces applications can be
continuously integrated!



Maven succesfully applied at Connexys,
Pagoni, Locatus, Nieuw Caledonië




















































































































































































































55

dec 20, 2007



aino.andriessen@amis.nl






http://technology.amis.nl/blog