Shade and assembly plugin: Assembling a jar containing packed jars

2011-08-17 Thread Jeremy Lewi
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

2011-07-05 Thread Jeremy Lewi
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

2011-07-05 Thread Jeremy Lewi
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