1 / 55

Maven project automation for dummies

Maven project automation for dummies. Aino Andriessen AMIS. 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.

amadeus
Télécharger la présentation

Maven project automation for dummies

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Maven project automation for dummies Aino Andriessen AMIS

  2. 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, deploys the application, performs integration tests and creates reports about these steps and communicates them with the team, all automatically without human interaction.

  3. Conditions • Infrastructure • Scripting • No IDE

  4. Scripting • Maven • ant • make • shell scripts • sql scripts • ...

  5. Demo

  6. 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. 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. 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. 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. mvn verify -PlocalOC4J

  11. 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. mvn site

  13. Build automation server

  14. 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. Infrastructure

  16. Software Studio

  17. Software development • The development environment • Source control • Delivery environments • Issue management • Library management • Build automation / continuous integration • Reporting and documentation • Communication

  18. Nightly build • Continuum • Scheduler • http://ci.amis.nl:8080/continuum/servlet/continuum

  19. 'Scripting' with Maven

  20. Maven Project Object Model • Project objects • xml file Build Lifecycle • actions / goals (tasks) • Dependency (library, artifact) Management • Reporting and Documentation • ...

  21. Convention over configuration

  22. 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. 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. 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. 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

  26. 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. Plugins • All 'tasks' are plugins • Written in java, ant

  28. 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. Maven repositories

  30. Maven repositories 2 • Local • Internal • Central • http://repo1.maven.org/maven2/ • External • Codehaus • java.net • ...

  31. Internal repository • commercial libraries • non-public libraries • company products

  32. AMIS internal repositories • http://ci.amis.nl/maven2/ • http://ci.amis.nl/maven2snapshots/

  33. 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. Snapshots • Dependency management for development 'releases'.

  35. Testing • Unittests • JUnit • TestNG • Integration tests • Database tests • ...

  36. Integration tests • Start application server • Prepare the database • Deploy application • Run tests • Undeploy application • Stop application server

  37. Integration tests • Front-end • Selenium • JMeter • Back-end / Database • QCTO • utPLSQL • Tools • dbunit • Maven sql plugin • Maven exec plugin • (JDeveloper) ant tasks

  38. Release • mvn release:prepare • update version • tag in scm • mvn release:perform • deploy tagged version • artifact • sources • doc • create and deploy file

  39. Maven projectsites • Documentation • Project info • Reports • http://ci.amis.nl/projectsites/

  40. Maven 'bits and pieces' • Reports • Profiles • Archetype • Cargo plugin • Multi module projects • ...

  41. ADF & JDeveloper & Maven

  42. Mavenize an ADF application • Dependency management • Crete or generate POM files • Tools

  43. Tools • admin_client.jar utility • deployment to OC4J • ojspc.jar utility • pre compilation of jsf files • [JDeveloper] • [oc4j]

  44. 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. Dependencies • Put (deploy) libraries in the internal repository • Keep pom file(s) in sync 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% <dependencies> <dependency> <groupId>com.oracle.adf</groupId> <artifactId>adfshare</artifactId> <version>10.1.3.41.57</version> <scope>provided</scope> </dependency> </dependencies>

  46. 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

  47. Application / Project organisation • Directory layout • Default Maven layout • JDev project settings • Application with multiple projects

  48. 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. 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. 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

More Related