Comment construire des sources jar avec gradle

Je travaille avec un projet open source construit avec gradle. Je voudrais générer un (projet)-sources.fichier jar que je peux charger dans mon IDE (IntelliJ IDEA) et déboguer à travers le projet. Je sais comment charger le fichier si je peux le générer.

J'ai regardé à travers les tâches de gradle disponibles pour le projet et il n'y en a pas qui génère un fichier JAR sources.

Quel est le moyen le plus simple de générer un fichier sources jar pour ce projet?

Ajouter le source dans le fichier jar qui contient les fichiers de classe compilés serait bien aussi.

119
demandé sur Paul D. Eden 2012-07-13 20:40:40

5 réponses

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
}
211
répondu JB Nizet 2012-07-13 17:05:53

Si vous utilisez 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
}

À Partir de ici

46
répondu Giordano 2015-03-10 16:45:08

Si vous souhaitez Ajouter les sources au fichier JAR des classes compilées, ce que vous avez également dit être acceptable, Vous pouvez le faire assez facilement. Ajoutez simplement ce qui suit à votre fichier de construction. Vous pouvez voir que, en théorie, c'est tout à fait comme la solution pour mettre des sources dans un pot séparé:

 jar {
     from sourceSets.main.allSource
 }

La différence est que vous l'ajoutez au fichier JAR principal en disant " jar " au lieu de sourcesJar.

31
répondu Michael Oryl 2014-10-10 16:47:59

Cela devrait fonctionner

assemble.dependsOn 'propertyJar'

task propertyJar(type: Jar) {
 archiveName = "myJarName.jar"
 from('src/main/resources') {
    include '**'
 }}
9
répondu Ali 2015-07-09 11:31:54

L'équivalent Kotlin DSL serait:

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)
    }
}
2
répondu wheleph 2018-01-03 03:12:19