2012-07-13 11 views
108

Estoy trabajando con un proyecto de código abierto que está construido con gradle. Me gustaría generar un archivo (project) -sources.jar que pueda cargar en mi IDE (IntelliJ IDEA) y depurar a través del proyecto. Sé cómo cargar el archivo si puedo generarlo.Cómo compilar fuentes jar con gradle

He examinado las tareas de gradle disponibles para el proyecto y no hay ninguna que genere un archivo jar de orígenes.

¿Cuál es la forma más fácil de generar un archivo jar de orígenes para este proyecto?

Agregar la fuente en el archivo jar que contiene los archivos de clase compilados estaría bien también.

Respuesta

191
task sourcesJar(type: Jar, dependsOn: classes) { 
    classifier = 'sources' 
    from sourceSets.main.allSource 
} 

task javadocJar(type: Jar, dependsOn: javadoc) { 
    classifier = 'javadoc' 
    from javadoc.destinationDir 
} 

artifacts { 
    archives sourcesJar 
    archives javadocJar 
} 
+3

estoy aceptando esta respuesta basada en n las grandes especificaciones y mi suposición que funciona en proyectos gradle que usan el plugin java. Lamentablemente, no funciona en mi caso, ya que el proyecto que estoy utilizando no usa el complemento java. El error que recibo es "No se pudo encontrar la propiedad" sourceSets 'en la tarea': sourcesJar '. " –

+0

En caso de que importe, el proyecto al que se hace referencia es hsqldb 2.2.8. –

+0

En mi situación, la propiedad allSource no recogía los archivos .java, tuve que cambiar la tarea de sourcesJar para usar: from sourceSets.main.java, sourceSets.main.resources –

29

Si desea añadir las fuentes en el archivo JAR compilado clases, que también dijo que sería aceptable, se puede hacer eso con bastante facilidad. Simplemente agregue lo siguiente a su archivo de compilación. Se puede ver que, en teoría, es absolutamente como la solución para poner las fuentes en un frasco separado:

jar { 
    from sourceSets.main.allSource 
} 

La diferencia es que va a agregar al archivo principal JAR diciendo "jar" en lugar de fuentesJar.

+0

En el sistema gradle de Android, recibo este error: "No se pudo encontrar el método jar() para los argumentos en el proyecto de tipo org.gradle.api.Proyecto " – iamreptar

+0

@iamreptar Probablemente deberías preguntarle a Giordano (autor de la próxima respuesta) sobre eso. No soy un desarrollador de Android. Http://stackoverflow.com/a/28969412/1480995 –

43

Si está usando Android:

task sourcesJar(type: Jar) { 
    from android.sourceSets.main.java.srcDirs 
    classifier = 'sources' 
} 

task javadoc(type: Javadoc) { 
    source = android.sourceSets.main.java.srcDirs 
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) 
} 

task javadocJar(type: Jar, dependsOn: javadoc) { 
    classifier = 'javadoc' 
    from javadoc.destinationDir 
} 

artifacts { 
    archives javadocJar 
    archives sourcesJar 
} 

de here

8

esto debería funcionar

assemble.dependsOn 'propertyJar' 

task propertyJar(type: Jar) { 
archiveName = "myJarName.jar" 
from('src/main/resources') { 
    include '**' 
}} 
+1

^para esto' assemble.dependsOn 'parte, lo que hace que esta tarea se ejecute automáticamente. – Jarekczek

-1

El equivalente DSL Kotlin sería:

tasks { 

    val sourcesJar by creating(Jar::class) { 
     dependsOn(JavaPlugin.CLASSES_TASK_NAME) 
     classifier = "sources" 
     from(java.sourceSets["main"].allSource) 
    } 

    val javadocJar by creating(Jar::class) { 
     dependsOn(JavaPlugin.JAVADOC_TASK_NAME) 
     classifier = "javadoc" 
     from(java.docsDir) 
    } 

    artifacts { 
     add("archives", sourcesJar) 
     add("archives", javadocJar) 
    } 
} 
Cuestiones relacionadas