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
2010-08-10 15:07:18
I am on 0.9rc1. so tried your first suggestion. Pulled in all sorts of stuff I didn't want.....
phil swenson
2010-08-11 05:00:03
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
2010-08-12 01:16:43
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
2010-08-12 01:47:21