Friday 6 September 2013

How to package all dependencies (jar) of a Maven project (pom.xml) into a folder

Alternative title: Where to find jboss-as-client-5.1.0.GA.jar

How all started: I wanted to access an instance of JBoss 5.1 with RMI using jnp (for >5.1 jnp is not supported!).
Unfortunately the required library jboss-as-client-5.1.0.GA.jar could not be found anywhere.
Even if you look at the JBoss repository
https://repository.jboss.org/nexus/index.html#nexus-search;quick~jboss-as-client you will see that there is a pom.xml
entry for jboss-as-client-5.1.0.GA.jar but you can not download the jar!

The solution:  The pom.xml jboss-as-client-5.1.0.GA.jar actually is a meta-pom. It downloads all the required jars. It doesn't build a jar!
So the following trick worked for me. I created a Maven project and added the jboss-as-client-5.1.0.GA.jar as dependency.
So maven downloaded all the dependencies of the jboss-as-client-5.1.0.GA.jar's pom.xml.
In order to do the same edit your project's pom.xml with the following lines:

<repository>
            <id>JBoss repository 1</id>
            <url>http://repository.jboss.org/nexus/content/groups/public-jboss/</url>
</repository>

<dependency>
            <groupId>org.jboss.jbossas</groupId>
            <artifactId>jboss-as-client</artifactId>
            <version>5.1.0.GA</version>
            <type>pom</type>
            <scope>runtime</scope>
</dependency>

How to run project as a jar: I wanted to package my project as jar and run it. By specification a jar cannot contain other jars. A common
solution is using a maven plugin which flattens all files in the dependency jars (i.e. extracts them) and puts them in your jar. I didn't
want this because ..it is ugly. Moreover I wanted to add in my classpath all jars that jboss-as-client-5.1.0.GA.jar's pom.xml downloaded
but there were 173 jars (see listing 1 for all of them in case someone needs them)!

So what I did...I packaged my project as a jar without any jar dependencies. I used the following command to download all dependencies of
jboss-as-client-5.1.0.GA.jar's pom.xml into folder lib_ext.

mvn dependency:copy-dependencies org.apache.maven.plugins:maven-dependency-plugin:2.8:copy-dependencies -f pom.xml -DoutputDirectory=lib_ext

Then I added in my classpath lib_ext/* and lib/* (all the other jar dependencies) and executed my project with!

listing 1: all jboss-as-client-5.1.0.GA.jar's pom.xml dependencies
├───lib_ext
│       activation-1.1.1.jar
│       ant-1.7.0.jar
│       ant-junit-1.7.0.jar
│       ant-launcher-1.7.0.jar
│       antlr-2.7.6.jar
│       avalon-framework-4.1.5.jar
│       bcel-5.1.jar
│       bsh-1.3.0.jar
│       cglib-2.1.3.jar
│       commons-collections-3.1.jar
│       commons-logging-1.1.0.jboss.jar
│       concurrent-1.3.4-jboss-update1.jar
│       dom4j-1.6.1.jar
│       dtdparser121-1.2.1.jar
│       ejb3-persistence-1.0.2.GA.jar
│       getopt-1.0.12-brew.jar
│       hibernate-annotations-3.4.0.GA.jar
│       hibernate-commons-annotations-3.1.0.GA.jar
│       hibernate-core-3.3.0.SP1.jar
│       hibernate-entitymanager-3.4.0.GA.jar
│       jaas-1.0.01.jar
│       jacc-1.0.jar
│       jacorb-2.3.0jboss.patch6-brew.jar
│       javassist-3.10.0.GA.jar
│       jaxb-api-2.1.9-brew.jar
│       jaxws-api-2.1.1.jar
│       jboss-aop-2.1.1.GA-client.jar
│       jboss-aop-2.1.1.GA.jar
│       jboss-aop-asintegration-core-2.1.1.GA.jar
│       jboss-aop-asintegration-jmx-2.1.1.GA.jar
│       jboss-aop-asintegration-mc-2.1.1.GA.jar
│       jboss-aop-aspects-2.1.1.GA.jar
│       jboss-aop-mc-int-2.0.6.GA.jar
│       jboss-as-aspects-5.1.0.GA.jar
│       jboss-as-client-5.1.0.GA.pom
│       jboss-as-cluster-5.1.0.GA-jboss-ha-legacy-client.jar
│       jboss-as-cluster-5.1.0.GA.jar
│       jboss-as-connector-5.1.0.GA.jar
│       jboss-as-deployment-5.1.0.GA.jar
│       jboss-as-ejb3-5.1.0.GA-client.jar
│       jboss-as-iiop-5.1.0.GA-client.jar
│       jboss-as-iiop-5.1.0.GA.jar
│       jboss-as-j2se-5.1.0.GA-tests.jar
│       jboss-as-j2se-5.1.0.GA.jar
│       jboss-as-jmx-5.1.0.GA.jar
│       jboss-as-main-5.1.0.GA-client.jar
│       jboss-as-main-5.1.0.GA.jar
│       jboss-as-management-5.1.0.GA-jsr77-client.jar
│       jboss-as-mbeans-5.1.0.GA.jar
│       jboss-as-profileservice-5.1.0.GA.jar
│       jboss-as-security-5.1.0.GA.jar
│       jboss-as-server-5.1.0.GA-client.jar
│       jboss-as-server-5.1.0.GA-jmx-invoker-adaptor-client.jar
│       jboss-as-server-5.1.0.GA.jar
│       jboss-as-system-5.1.0.GA-client.jar
│       jboss-as-system-5.1.0.GA.jar
│       jboss-as-system-jmx-5.1.0.GA-client.jar
│       jboss-as-system-jmx-5.1.0.GA.jar
│       jboss-bootstrap-1.0.0-Beta-3.jar
│       jboss-classloader-2.0.6.GA.jar
│       jboss-classloading-2.0.6.GA.jar
│       jboss-classloading-spi-5.1.0.GA.jar
│       jboss-classloading-vfs-2.0.6.GA.jar
│       jboss-common-core-2.2.14.GA.jar
│       jboss-corba-ots-spi-5.1.0.GA.jar
│       jboss-current-invocation-aspects-1.0.0.CR1.jar
│       jboss-dependency-2.0.6.GA.jar
│       jboss-deployers-client-2.0.7.GA.jar
│       jboss-deployers-client-spi-2.0.7.GA.jar
│       jboss-deployers-core-2.0.7.GA.jar
│       jboss-deployers-core-spi-2.0.7.GA.jar
│       jboss-deployers-impl-2.0.7.GA.jar
│       jboss-deployers-spi-2.0.7.GA.jar
│       jboss-deployers-structure-spi-2.0.7.GA.jar
│       jboss-deployers-vfs-2.0.7.GA.jar
│       jboss-deployers-vfs-spi-2.0.7.GA.jar
│       jboss-deployment-spi-5.1.0.GA.jar
│       jboss-ejb-api-3.0.0.GA.jar
│       jboss-ejb3-1.1.5.pom
│       jboss-ejb3-as-int-1.1.5.jar
│       jboss-ejb3-cache-1.0.0.jar
│       jboss-ejb3-common-1.0.0-client.jar
│       jboss-ejb3-common-1.0.0.jar
│       jboss-ejb3-core-1.1.5-client.jar
│       jboss-ejb3-core-1.1.5.jar
│       jboss-ejb3-deployers-1.0.0.jar
│       jboss-ejb3-endpoint-0.1.0.jar
│       jboss-ejb3-ext-api-1.0.0.jar
│       jboss-ejb3-ext-api-impl-1.0.0.jar
│       jboss-ejb3-interceptors-1.0.2.jar
│       jboss-ejb3-mc-int-1.0.1.jar
│       jboss-ejb3-metadata-1.0.0.jar
│       jboss-ejb3-proxy-clustered-1.0.1-client.jar
│       jboss-ejb3-proxy-clustered-1.0.1.jar
│       jboss-ejb3-proxy-impl-1.0.2-client.jar
│       jboss-ejb3-proxy-impl-1.0.2.jar
│       jboss-ejb3-proxy-spi-1.0.0-client.jar
│       jboss-ejb3-proxy-spi-1.0.0.jar
│       jboss-ejb3-security-1.0.0-client.jar
│       jboss-ejb3-security-1.0.0.jar
│       jboss-ejb3-timerservice-spi-1.0.0.jar
│       jboss-ejb3-transactions-1.0.0.jar
│       jboss-ha-client-1.1.1.GA.jar
│       jboss-ha-server-api-1.1.1.GA.jar
│       jboss-ha-server-cache-jbc-2.0.0.GA.jar
│       jboss-ha-server-cache-spi-2.0.0.GA.jar
│       jboss-integration-5.1.0.GA.jar
│       jboss-jacc-api-1.1.0.GA_SP1.jar
│       jboss-jad-api-1.2.0.GA.jar
│       jboss-jaspi-api-1.0.0.GA.jar
│       jboss-javaee-5.0.1.GA.jar
│       jboss-jaxws-3.0.1-native-2.0.4.GA.jar
│       jboss-jca-api-1.5.0.GA.jar
│       jboss-jca-spi-5.0.3.GA.jar
│       jboss-jms-api-1.1.0.GA.jar
│       jboss-jpa-deployers-1.0.0.jar
│       jboss-kernel-2.0.6.GA.jar
│       jboss-logbridge-1.0.0.GA.jar
│       jboss-logging-jdk-2.1.0.GA.jar
│       jboss-logging-log4j-2.1.0.GA.jar
│       jboss-logging-spi-2.1.0.GA.jar
│       jboss-logmanager-1.0.0.GA.jar
│       jboss-managed-2.1.0.CR8.jar
│       jboss-mdr-2.0.1.GA.jar
│       jboss-messaging-1.4.3.GA.jar
│       jboss-metadata-1.0.1.GA.jar
│       jboss-metatype-2.1.0.SP1.jar
│       jboss-profiler-jvmti-1.0.0.CR5.jar
│       jboss-profileservice-spi-5.1.0.GA.jar
│       jboss-reflect-2.0.2.GA.jar
│       jboss-remoting-2.5.1.jar
│       jboss-remoting-aspects-1.0.2.jar
│       jboss-security-aspects-1.0.0.GA.jar
│       jboss-security-spi-2.0.3.SP1.jar
│       jboss-serialization-1.0.3.GA.jar
│       jboss-server-manager-1.0.2.GA.jar
│       jboss-test-1.1.4.GA.jar
│       jboss-transaction-api-1.0.1.GA.jar
│       jboss-transaction-aspects-1.0.0.GA.jar
│       jboss-transaction-spi-5.1.0.GA.jar
│       jboss-vfs-2.1.2.GA.jar
│       jbosscache-core-3.1.0.GA.jar
│       jbosssx-2.0.3.SP1.jar
│       jbosssx-client-2.0.3.SP1.jar
│       jbossws-native-jaxrpc-3.0.4.GA.jar
│       jbossws-native-jaxws-3.1.2.GA.jar
│       jbossws-native-saaj-3.1.2.GA.jar
│       jbossws-spi-1.0.3.GA.jar
│       jbossxacml-2.0.3.jar
│       jbossxb-2.0.1.GA.jar
│       jgroups-2.6.10.GA.jar
│       jnp-client-5.0.3.GA.jar
│       jnpserver-5.0.3.GA.jar
│       jpl-pattern-1.0.jar
│       jpl-util-1.0.jar
│       jsr181-api-2.1.1.jar
│       jta-1.1.jar
│       junit-3.8.2.jar
│       log4j-1.2.14.jar
│       mail-1.4.jar
│       pluggable-instrumentor-2.1.1.GA.jar
│       qdox-1.6.1.jar
│       quartz-1.6.0.jar
│       regexp-1.2.jar
│       servlet-api-2.1.1.GA.jar
│       slf4j-api-1.5.6.jar
│       slf4j-jboss-logging-1.0.2.GA.jar
│       stax-api-1.0.jar
│       trove-2.1.1.jar
│       xercesImpl-2.9.1.jar
│       xml-apis-1.0.b2.jar
│       xml-apis-2.9.1.jar
│       xmlsec-1.4.2.jar.



No comments:

Post a Comment