Shade and assembly plugin: Assembling a jar containing packed jars
Hi, I'm working on Apache AVRO (Issue 570) and I'm having a maven issue that I was hoping to get some help with. The pre-existing pom.xml is using the shade plugin to build a jar which includes all of the dependencies, unpacked. The configuration is below. org.apache.maven.plugins maven-shade-plugin 1.4 shade org.apache.avro.tool.Main The net result of running the shade plugin is three jars 1. avro-tools-1.6.0-SNAPSHOT.jar - which includes all of the dependency jars as well as the classes specific to this project. 2. original-avro-tools-1.6.0-SNAPSHOT.jar - which doesn't include any dependency files 3. avro-tools-1.6.0-SNAPSHOT-nodeps.jar - which seems to be the same as original-avro-tools-1.6.0-SNAPSHOT.jar. Now I need to build another jar, avro-tools-1.6.0-SNAPSHOT-job.jar, which places all the jars on which we depend in the directory "lib" inside avro-tools-1.6.0-SNAPSHOT-job.jar. avro-tools-1.6.0-SNAPSHOT-job.jar should also contain the class files for avro-tools. Because the shaded plugin causes avro-tools-1.6.0-SNAPSHOT.jar to contain unpacked versions of all dependencies, I set my maven assembly configuration to use the "nodeps" version of the avro-tools jar. Unfortunately, this prevents any of the tools code from being included in the jar built by the assembly plugin. This is the configuration for my assembly file. http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation=" http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd";> job jar false false runtime lib org.apache.avro:avro-tools true runtime / org.apache.avro:avro-tools:jar:${project.version}:nodeps META-INF META-INF/** If I remove "nodeps" then the jar built by the assembly plugin ends up containing unpacked as well as packed versions of the dependencies because its using avro-tools-1.6.0-SNAPSHOT.jar Can anyone tell me how I can leave the shaded plugin configured as is, and still use the assembly plugin to build avro-tools-1.6.0-SNAPSHOT-job.jar? Thanks Jeremy
Re: Dependencies in pom aggregation
Scott and Stephen, Thank you both for the quick responses. That seems to have worked for me. For archival purposes the steps that seem to have worked for me are: 1. Modified the configuration for the jar-plugin as specified here http://maven.apache.org/guides/mini/guide-attached-tests.html 2. In tools I then declared a dependency on mapred using test-jar test 3. in mapred I did an mvn install to install the artifacts J On Tue, 2011-07-05 at 15:57 -0700, Scott Carey wrote: > Maven can work with a 'test' dependency, by declaring the dependency of > type "test-jar". > > See > http://maven.apache.org/guides/mini/guide-attached-tests.html > http://maven.apache.org/plugins/maven-jar-plugin/test-jar-mojo.html > > Unfortunately there are some bugs in various Maven plugins so we have been > avoiding using test-jars for now. In particular, if you use a test-jar > and then do: > > $ mvn clean > $ mvn compile > > with no 'install' and no artifacts in your local repo, it may fail, trying > to resolve and pull the test dependency during compile. This is not the > fault of the test-jar or dependency declaration, but bugs in various other > plugins in our toolchain, see > http://jira.codehaus.org/browse/MRRESOURCES-53. > > -Scott > > On 7/5/11 2:52 PM, "Jeremy Lewi" wrote: > > >Hi, > > > >I'm working on the apache avro project and I'm having a problem with > >maven that I was hoping to get some help with. > > > >My project consists of several modules, one of which is "mapred". > >Now I can build "mapred" just fine e.g by doing mvn package from within > >the project. > > > >Another module in the project is "tools". This module depends on the > >"mapred" module. So its pom file declares the artifact for mapred as a > >dependency. So far so good. > > > >The problem is I would like to make the test class in the "tools" > >modules depend on the "test" classes in "mapred". So I would like to > >build a jar in "mapred" containing the "test" classes and then declare > >this as a dependency for the test classes in "tools". > > > >In the mapred module I can build a jar containing the test classes > >by doing mvn jar:test-jar but I'm not sure how to add this jar as a > >dependency for the "tools" module during testing. > > > >Thanks > >Jeremy > > > > > > > > > - To unsubscribe, e-mail: users-unsubscr...@maven.apache.org For additional commands, e-mail: users-h...@maven.apache.org
Dependencies in pom aggregation
Hi, I'm working on the apache avro project and I'm having a problem with maven that I was hoping to get some help with. My project consists of several modules, one of which is "mapred". Now I can build "mapred" just fine e.g by doing mvn package from within the project. Another module in the project is "tools". This module depends on the "mapred" module. So its pom file declares the artifact for mapred as a dependency. So far so good. The problem is I would like to make the test class in the "tools" modules depend on the "test" classes in "mapred". So I would like to build a jar in "mapred" containing the "test" classes and then declare this as a dependency for the test classes in "tools". In the mapred module I can build a jar containing the test classes by doing mvn jar:test-jar but I'm not sure how to add this jar as a dependency for the "tools" module during testing. Thanks Jeremy - To unsubscribe, e-mail: users-unsubscr...@maven.apache.org For additional commands, e-mail: users-h...@maven.apache.org