Friday, June 27, 2014

Maven support for 12.1.3 Service Bus & SOA Suite artifacts

With the 12.1.3 release of Oracle Service Bus and Oracle SOA Suite we finally can build all our soa projects with Maven. And this time we can do it natively without calling a utility like configjar or ANT from Maven .

We start by setting all the required variables like JAVA_HOME,M2_HOME and PATH

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre
export M2_HOME=/Users/edwin/apache-maven-3.0.5
export PATH=${M2_HOME}/bin:${JAVA_HOME}:$PATH

Check if maven works

mvn -v 

You can also use the maven 3.0.5 version of JDeveloper 12.1.3 located at .../oracle_common/modules/org.apache.maven_3.0.5

Next step is to populate all the maven repositories

cd  .../oracle_common/plugins/maven/com/oracle/maven/oracle-maven-sync/12.1.3

install the maven sync plugin to the local repository

mvn install:install-file -DpomFile=oracle-maven-sync-12.1.3.pom -Dfile=oracle-maven-sync-12.1.3.jar -DoracleHome=/Users/edwin/Oracle/JDevMiddleware12.1.3

Deploy all the libraries to the local mvn repository

mvn -DoracleHome=/Users/edwin/Oracle/JDevMiddleware12.1.3

update your local archetype catalog

mvn archetype:crawl -Dcatalog=$HOME/.m2/archetype-catalog.xml

Next steps are, to do the same but then we will fill the Nexus repository

Deploy the maven sync plugin to the nexus maven repository and we need to configure the maven settings.xml

mvn deploy:deploy-file -DpomFile=oracle-maven-sync-12.1.3.pom -Dfile=oracle-maven-sync-12.1.3.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty -DrepositoryId=internal

and do a another sync


Here is the matching maven settings.xml


      <name>Internal nexus Mirror of Central</name>





Next step is to do a describe of the soa and osb plugin

mvn help:describe -DartifactId=oracle-soa-plugin -Dversion=12.1.3-0-0

with this as output

Name: Oracle SOA Maven Plugin
Description: This plugin allows users to compile, package, deploy, test and
  undeploy SOA composites.
Group Id:
Artifact Id: oracle-soa-plugin
Version: 12.1.3-0-0
Goal Prefix: oracle-soa

This plugin has 6 goals:

  Description: Compiles the composite. Note that 'compiling' a composite does
    not actually produce any new files, it is really a 'validation' and
    produces only output messages.

  Description: To deploy a SOA composite (supports all formats SAR, MAR,

  Description: Display help information on oracle-soa-plugin.
    Call mvn oracle-soa:help -Ddetail=true -Dgoal=<goal-name> to display
    parameter details.

  Description: Packages the composite into a SAR.

  Description: To execute SCA Test Suites.

  Description: Undeploy a SOA composite from a SOA managed server or cluster

mvn help:describe -DartifactId=oracle-servicebus-plugin -Dversion=12.1.3-0-0

with this as output

Name: Oracle Service Bus - Plugin
Description: (no description available)
Group Id:
Artifact Id: oracle-servicebus-plugin
Version: 12.1.3-0-0
Goal Prefix: servicebus

This plugin has 2 goals:

  Description: (no description available)

  Description: (no description available)

Now we are able to create a new Service Bus project from a Maven Archetype.

Provide the all the maven details

Search for the servicebus application ArcheType and select this one

Provide the required projectName of this archetype

Create the application

Now we got a Service Bus application with 3 poms, One project with sbar as package type , System project pom and a parent pom with these 2 projects

Now we can build the Service Bus project from JDeveloper by selecting the pom and right click to start for example run the package phase.

or from a terminal by using mvn package

We can do the same for a SOA Suite application and a SOA Composite.

Search for oracle-soa-application

Now we got 2 poms ( 1 is at the workspace level )  and project packaging is now a sar.

And we can also build the soa composite.


  1. Thanks for detailed steps. Wondering is it possible to deploy/remove MDS data using maven soa plugin ? I do not see any specific goals for it.

    1. Hi,

      You can use the normal soa deploy plugin, just zip the mds artifacts and deploy it just like a sar. Removal of MDS artifacts is only possible with WLST and maybe with JDeveloper MDS DB resource


  2. This comment has been removed by the author.

  3. Edwin,

    Everything seems to work fine up until the point where I try to install the Nexus Repository

    "Next steps are, to do the same but then we will fill the Nexus repository

    Deploy the maven sync plugin to the nexus maven repository and we need to configure the maven settings.xml"

    At this point it all falls over

    The error is

    [INFO] ------------------------------------------------------------------------
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 2.704s
    [INFO] Finished at: Sun Oct 26 14:58:41 NZDT 2014
    [INFO] Final Memory: 14M/361M
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file (default-cli) on project standalone-pom: Failed to deploy artifacts: Could not transfer artifact from/to internal (http://localhost:8081/nexus/content/repositories/thirdparty): Connection to http://localhost:8081 refused: Connection refused -> [Help 1]
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [ERROR] [Help 1]

    However when I go to this address it talks about the setting required for a proxy and I'm sitting at home without any proxies on my machine

    I can move on past this step and successfully describe both the soa and osb plugin. But when I try to create a project based on a maven archetype there is nothing there.....

    This is my first attempt at using Maven so please excuse any beginners mistakes.

    I assume the nexus repository will contain the archetypes that can be accessed from JDeveloper....

    Do you have any idea where I need to start to resolve this issues



    1. Hi,

      I do both, to local and to nexus and in nexus I changed the third party repo to allow duplicates and snaphosts .

      and offcourse you need to provide the password of your repo in your mvn settings file . and check if the password is ok in the nexus web application

      Hope this helps

  4. Hi Edwin

    Thanks for clear explanation. any hint on how to achieve this. we want to pass a list of composite to a parent POM file dynamic not to hardcode them. provided we have ${compositeList}=Project1,Project2,Project3 this must be passed to the POM file to create


    any help will be appreciated


    1. Hi,

      maven is not flexible and everything is fixed (not dynamic) , for dynamic you should use ANT or Gradle.