En gradle: ¿cómo puedo incrustar jarras dentro de mi jar de salida de compilación en el directorio lib (específicamente lib/enttoolkit.jar y lib/mail.jar)?gradle: ¿cómo puedo compilar un jar con un directorio lib con otros jarrones?
Respuesta
Lifted textualmente de: 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)
}
}
Los fragmentos anteriores sólo incluirán las dependencias de compilación para ese proyecto, no cualquier tiempo de ejecución transitivo dependencias. Si también desea fusionarlos, reemplace configurations.compile con configurations.runtime.
EDIT: solamente la elección de los frascos que necesita
realizar una nueva configuración, releaseJars quizá
configurations {
releaseJars
}
Añadir los frascos que desea que la configuración
dependencies {
releaseJars group: 'javax.mail', name: 'mail', version: '1.4'
//etc
}
luego usar esa configuración en la tarea jar que se describe arriba.
Estoy en 0.9rc1. así que probé tu primera sugerencia. Tiré todo tipo de cosas que no quería ... –
más cerca, creo ... el problema es que necesito los frascos en un directorio lib. Esto atrae las clases de los frascos. Quiero lib/lib electrónico y/enttoolkit en el frasco de salida –
esto funciona ... más o menos: sourceSets {{ principal de Java { SRCDIR "wepTrunk $/osgi/mycompany.osgi.server/src" } recursos { SRCDIR "/Users/phil/dev/trunk/osgi/mycompany.osgi.server/lib" }} } pone los frascos de mi/usuarios/phil/dev/trunk/osgi /mycompany.osgi.server/lib en mi jar de salida, pero no en el directorio "lib". ¿Alguna idea de cómo obtenerlos en una lib dir? –
Necesitaba lo mismo que me pidió y usé este método. es posible que no necesite una declaración de configuración personalizada, pero necesitaba separar los archivos jar usados localmente de los declarados en un archivo de superconstrucción.
configurations{
//declare custom config if necessary, otherwise just use compile
myLibs
}
dependencies {
//add lib/*.jar files to myLibs
myLibs fileTree(dir: 'lib', include: '*.jar')
compile {
//set compile configuration to extend from myLibs
extendsFrom myLibs
}
}
// task to copy libs to output/lib dir
task copyToLib(type: Copy) {
into "$buildDir/output/lib"
from configurations.myLibs
}
jar {
//include contents of output dir
from "$buildDir/output"
manifest {
//...
}
}
//set build task to depend on copyToLib
build.dependsOn(copyToLib)
Si tiene todos los frascos dentro de un directorio (permite llamarlo libs
) en su proyecto, sólo necesita esto:
jar {
into('lib') {
from 'libs'
}
}
supongo que es más probable que estos frascos son dependencias de algún tipo. Posteriormente, se podría hacerlo de esta manera:
configurations {
// configuration that holds jars to copy into lib
extraLibs
}
dependencies {
extraLibs 'org.something:something-dep1:version'
extraLibs 'org.something:something-dep2:version'
}
jar {
into('lib') {
from configurations.extraLibs
}
}
Si desea todas las dependencias, también puede copiar de 'configurations.runtime', que le da las dependencias' compile' predeterminadas, ahorrándole la molestia de crear su propia configuración 'extraLibs'. – Thunderforge
Error: No se pudo encontrar el método jar() para los argumentos [build_bndovev91pu8trwrdngc8qh7i $ _run_closure5 @ 3be2321e] en el proyecto ': app' del tipo org.gradle.api.Project. – naXa
también que tenía que hacer algo similar y no estaba muy capaz de conseguir lo Guus y stigkj sugirieron trabajar, pero lo suficientemente cerca con su ayuda a conseguir este trabajo (Guus 'ejemplo explotó sobre el cierre dependencies { compile { extendsFrom myLibs }}
para mí.
apply plugin: 'groovy'
repositories {
mavenCentral()
}
configurations {
// custom config of files we want to include in our fat jar that we send to hadoop
includeInJar
}
dependencies {
includeInJar 'org.codehaus.groovy:groovy:1.8.6'
configurations.compile.extendsFrom(configurations.includeInJar)
}
jar {
into('lib') {
println "includeInJar: " + configurations.includeInJar.collect { File file -> file }
from configurations.includeInJar
}
}
Entonces el correr gradle jar
y examinando el frasco creado me da esta salida, demostrando que puedo conseguir el archivo jar de tener maravilloso, así como todos los frascos que es dependiente dentro del "tarro de grasa":
% gradle jar
includeInJar: [/Users/tnaleid/.gradle/caches/artifacts-8/filestore/org.codehaus.groovy/groovy/1.8.6/jar/553ca93e0407c94c89b058c482a404427ac7fc72/groovy-1.8.6.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/antlr/antlr/2.7.7/jar/83cd2cd674a217ade95a4bb83a8a14f351f48bd0/antlr-2.7.7.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm/3.2/jar/9bc1511dec6adf302991ced13303e4140fdf9ab7/asm-3.2.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm-tree/3.2/jar/cd792e29c79d170c5d0bdd05adf5807cf6875c90/asm-tree-3.2.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm-commons/3.2/jar/e7a19b8c60589499e35f5d2068d09013030b8891/asm-commons-3.2.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm-util/3.2/jar/37ebfdad34d5f1f45109981465f311bbfbe82dcf/asm-util-3.2.jar, /Users/tnaleid/.gradle/caches/artifacts-8/filestore/asm/asm-analysis/3.2/jar/c624956db93975b7197699dcd7de6145ca7cf2c8/asm-analysis-3.2.jar]
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
BUILD SUCCESSFUL
Total time: 3.387 secs
% jar tvf build/libs/gradletest.jar
0 Mon Mar 12 11:40:00 CDT 2012 META-INF/
25 Mon Mar 12 11:40:00 CDT 2012 META-INF/MANIFEST.MF
0 Mon Mar 12 11:40:00 CDT 2012 lib/
5546084 Mon Mar 05 13:13:32 CST 2012 lib/groovy-1.8.6.jar
445288 Mon Mar 05 13:13:38 CST 2012 lib/antlr-2.7.7.jar
43398 Mon Mar 05 13:13:40 CST 2012 lib/asm-3.2.jar
21878 Mon Mar 05 13:13:40 CST 2012 lib/asm-tree-3.2.jar
33094 Mon Mar 05 13:13:40 CST 2012 lib/asm-commons-3.2.jar
36551 Mon Mar 05 13:13:40 CST 2012 lib/asm-util-3.2.jar
17985 Mon Mar 05 13:13:40 CST 2012 lib/asm-analysis-3.2.jar
Ok, he hecho lo que aquí se describe, pero sigo recibiendo 'Exception in thread 'main" java.lang.NoClassDefFoundError: com/rabbitmq/client/ConnectionFactory'. ¿Debo configurar classpath de alguna manera? – omikron
simple:
task copyToLib(type: Copy) {
into "$buildDir/libs/lib"
from configurations.runtime
}
jar { dependsOn copyToLib }
plazo es:
$ gradle jar
...
$ tree build/libs
build/libs
├── your-project-0.0.1.BUILD-SNAPSHOT.jar
└── lib
├── akka-actor-2.0.jar
├── akka-camel-2.0.jar
├── ... ... ...
├── spring-expression-3.1.0.RELEASE.jar
└── zmq-2.1.9.jar
1 directory, 46 files
Esto copia las bibliotecas en el directorio de salida, pero no en el archivo JAR, que era la pregunta. – TheOperator
A continuación código podría ser juzgado.Depende de la tarea jar y es de tipo Jar
task createJobJar(dependsOn:jar,type:Jar) {
manifest {
attributes(
"Implementation-Title": 'Job '
,"Implementation-Version": version
)
}
classifier 'job'
destinationDir new File("$buildDir")
into('libs'){
from configurations.compile
}
into('classes'){
from "$buildDir/classes"
}
into('resources'){
from "$projectDir/src/main/resources"
}
into('scripts'){
from "$projectDir/src/main/scripts"
}
}
El código anterior incluiría diferentes contenidos dentro de directorios diferentes. Probado en gradle 2.2
Trabajando perfecto – nikhil
En mi caso, necesitaba incluir un contenido del proyecto raíz Jar en el subproyecto Jar. Así que, para que funcione, se puede utilizar esta plantilla:
jar{
manifest{
attributes 'Main-Class':'<main class>'
}
def conf= configurations.find {it.name.equals('compile') }
File jar= conf.files.find {it.name.contains('<name or part of the name of produced Jar>')}
FileTree fileTree=zipTree(jar)
from fileTree
}
Mi ejemplo:
jar{
manifest{
attributes 'Main-Class':'alexiy.jace.Jace'
}
description='Make a runnable API Jar'
def conf= configurations.find {it.name.equals('compile') }
File tools= conf.files.find {it.name.contains('Tools')}
FileTree fileTree=zipTree(tools)
from fileTree
}
task <taskname>(type: Jar) {
archiveName 'nameofjar.jar'
doFirst {
manifest {
attributes 'Class-Path': configurations.compile.files.collect{ project.uri(it) }.join(' ')
}
}
}
¿Alguna explicación acerca de lo que hace este código podría ayudar a explicar algunos de los bits específicos? – Tom
- 1. Cómo compilar fuentes jar con gradle
- 2. Crear un JAR ejecutable Groovy con Gradle
- 3. Uso de Gradle para crear un jar con dependencias
- 4. Construyendo un uberjar con Gradle
- 5. Gradle - Agregar un solo archivo a JAR
- 6. Cómo generar archivos de código fuente y compilar con Gradle
- 7. ¿Cómo puedo comprimir un directorio con .NET?
- 8. ¿Cómo comodín incluyen archivos JAR al compilar?
- 9. Ant copy classpath jar a un directorio
- 10. Creando un paquete jar con ant
- 11. ¿Cómo puedo crear un archivo .jar autoconsistente con Eclipse?
- 12. Cómo leer un archivo dentro de un Jar con JRuby
- 13. prueba continua con gradle
- 14. ¿Qué jarrones son exactamente necesarios para incrustar Neo4j?
- 15. Definición de classpath personalizado para un manifiesto jar en gradle
- 16. ¿Cómo puedo crear un contenedor de rutas en Gradle?
- 17. ¿Cómo reemplazar correctamente la tarea Gradle 'jar'?
- 18. ¿Cómo puedo usar gems-in-a-jar con JRuby incrustado?
- 19. Eclipse: ¿Cómo construir un jar ejecutable con jar externo?
- 20. ¿Cómo creo un JAR con m2e (m2eclipse)?
- 21. orden de carga de archivos JAR del directorio lib
- 22. Gradle: nombre de archivo jar en el complemento java
- 23. ¿Cómo compilar un solo archivo con maven?
- 24. Cómo crear un jar ejecutable con jar de dependencia
- 25. Cómo compilar solo un archivo con sphinx
- 26. Gradle: Poner un jar de terceros disponible para el repositorio local de gradle
- 27. ¿Cómo puedo especificar la ruta de un JAR en un archivo de compilación de ant?
- 28. ¿Cómo puedo detectar cuando un directorio está montado con inotify?
- 29. Cómo compilar el proyecto de Java con el archivo jar externo en el terminal de Linux
- 30. Agregar el directorio actual al classpath de un archivo JAR
https://stackoverflow.com/questions/4871656/using-gradle-to- build-a-jar-with-dependencies –