tags:

views:

65

answers:

1

In gradle - how can I embed jars inside my build output jar in the lib directory (specifially the lib/enttoolkit.jar and lib/mail.jar)?

+2  A: 

Lifted verbatim from: http://docs.codehaus.org/display/GRADLE/Cookbook#Cookbook-Creatingafatjar

Gradle 0.9:

jar {
    from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}

Gradle 0.8:

jar.doFirst {
    for(file in configurations.compile) {
        jar.merge(file)
    }
}

The above snippets will only include the compile dependencies for that project, not any transitive runtime dependencies. If you also want to merge those, replace configurations.compile with configurations.runtime.

EDIT: only choosing jars you need

Make a new configuration, releaseJars maybe

configurations {
    releaseJars
}

Add the jars you want to that configuration

dependencies {
    releaseJars group: 'javax.mail', name: 'mail', version: '1.4'
    //etc
}

then use that configuration in the jar task outlined above.

lucas
I am on 0.9rc1. so tried your first suggestion. Pulled in all sorts of stuff I didn't want.....
phil swenson
closer I think...problem is I need the jars in a lib directory. This pulls in the classes from the jars. I want lib/mail and lib/enttoolkit in the output jar
phil swenson
this works... sort of: sourceSets { main { java { srcDir "$wepTrunk/osgi/mycompany.osgi.server/src" } resources { srcDir "/Users/phil/dev/trunk/osgi/mycompany.osgi.server/lib" } }}it puts the jars from my /users/phil/dev/trunk/osgi/mycompany.osgi.server/lib in my output jar, but not in a "lib" directory. Any ideas how to get them in a lib dir?
phil swenson

related questions