2. ALM before 12c
• Focus on declarative development
• Application Lifecycle Management as an afterthought
– JDeveloper tasks
• Build
• Deploy
• Code analysis
– Dependent on JDeveloper installation
• 'internal' libraries
• ojdeploy
• Relative / hard-coded paths
– Build Magic
– Limited or no support for build tools like Ant and Maven.
– Subversion support comes late, is unintuitive and thus hardly used
– Team Productivity Center
3. 3
What about 12c?
• Full Maven support in the entire Fusion Middleware stack
• Subversion 1.7 client
• Git support (since 11.1.1.6 (v2))
• Better code analysis (ojaudit)
• Ant support is slightly improved
• Application level build files (since 11.1.1.5)
• But still dependent on JDeveloper installation
5. 5
What is Maven?
• Project description
– pom.xml
• Lifecycle
• 'Tasks'
– Provided by plugins
• sources, compiler, surefire, jar, war, ear, scm, assembly, release,
enforcer, sql, …
– Goals
• compiler:compile, compiler:testCompile, surefire:test, jar:jar, war:war,
war:manifest, scm:tag, scm:checkin, …
– can be bound to lifecycle phases
• Dependency Management
• Artifact repository
6. 6
Maven dependency
management
• An "artifact" is something produced by the software development process
-> deliverable
• An artifact is identified by GroupId, ArtifactId, Version
• A dependency is an artifact needed by the project
– e.g. JUnit, Hibernate, commons-lang, …
• Transitive dependencies
– Dependencies of dependencies
• Bill of Materials
– Artifact that only contains dependencies
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.3</version>
<scope>compile</compiler>
<type>jar</jar>
</dependency>
…
</dependencies>
7. 7
Artifact Repository
• Repositories store artifacts
– Repository Manager
• Used by Maven for
– plugins
– dependencies
• local
– ~/.m2/repository
– configure in settings.xml
– classpath
• central
– http://repo1.maven.org/maven2/
• The first execution of a plugin or requirement for a
dependency pulls the artifact from central and caches it
locally
• Internal / Organization
– Company artifacts
– Third party
– Proxy
central
local
Project
internal
9. 9
Fusion Middleware and Maven
• Maven 3.0.4
• ADF, WLS, Coherence
• Create enable Maven project
• pom editor
• Dependency management
– ADF (and other) libraries
• jars and Bill of Materials
• Repository synchronization plug-in
– To load dependencies from Middleware in internal and local
– Not a public repository
• Maven plugins
• Maven Archetypes
• …
• Maven is all over JDeveloper!!
10. 10
Maven project
• Create Project and define Maven as build tool
• Mavenize existing project
• Create from archetype
• Import Maven project
11. 11
pom editor
• Fairly complete
– No properties
– No editing for developers, organization, scm, ci, issue mgt, …
– No distributionManagement
– Profile editing is minimal
• sync with jpr
• Source editor
– with code completion
• Effective pom
• Search and add dependencies
• Include unittests
13. 13
Goal execution
• Right mouse on pom.xml
• Configure Goal profile
• No toolbar button
• No custom (plugin) goals or combinations
14. 14
Plugins
• ADF
– ojmake
• can be used for applications and projects that don't involve any deployment, for example, projects with no
deployment profile defined.
– ojdeploy
• can handle the build of any application and project (including any that involve deployment). You can think of it
as a super-set of ojmake.
• WebLogic Maven Plugin
– (un)install (server), start/stop-server, create-domain, (un)(re)deploy, wlst, appc, ws-
jwsc, …
• Coherence Maven Plugin aka maven-gar-plugin
– package, …
15. 15
Using ojdeploy / ojmake
• Environment dependencies :-(
– Use properties, environment variables or '-D' (preferences - additional settings) for workstation
configuration
– Use ${basedir} for build root
• slow: ojmake and ojdeploy are always executed (even if files are already compiled)
<plugin>
<groupId>com.oracle.adf.plugin</groupId>
<artifactId>ojdeploy</artifactId>
<version>12.1.2-0-0</version>
<configuration>
<ojdeploy>C:oracleMiddleware12.1.2.0.0jdeveloperjdevbinojdeploy.exe</ojdeploy>
<workspace>C:projectsprobeerselsHR12cHR12c.jws</workspace>
<project>ViewController</project>
<profile>HR12cVC_adflib HR12c_Project1_webapp</profile>
<usemaven>true</usemaven>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>
16. 17
Repository synchronization
plug-in
• Populate a Maven repository from a given Oracle home with the Oracle
specific libraries
• Sync to local is also done automagically from JDeveloper
1. Install plug-in in internal repository
2. Run the Oracle Maven Synchronization Plug-In
1. populate local and internal
3. [Update archetype catalogs]
4. Redo when updating JDev
• http://docs.oracle.com/middleware/1212/core/MAVEN/config_maven.htm
18. 20
Issues
• Pom editor not complete
• Hard coded local dependencies (ojdeploy, ojmake)
• ojdeploy / ojmake are slow, always fully executed
– Artifact name is defined in build profile
• No Maven project structure (src/main/java)
• I couldn't get the BC Unittests to execute (can't find connection)
• 'Bending the Maven multi-module way'
– Parent has modules, but childs don't reference the parent
– No inheritance
– No dependencyManagement usage
– Use parent pom to build ear
• Defaults are not always chosen wisely
• Can't continue failed build
• Not able to run custom goals
19. 21
Summary
• Fairly complete Maven support
• It seems to work!
• pom - jpr sync
• Still dependent on JDeveloper
• Still issues
• Don't use Maven as a full build replacement when working in JDeveloper