186 votes

Comment construire les sources JAR avec Gradle ?

Je travaille sur un projet open source construit avec Gradle. J'aimerais générer un (projet)-sources.jar que je peux charger dans mon IDE (IntelliJ IDEA) et déboguer le projet. Je sais comment charger le fichier si je peux le générer.

J'ai regardé les tâches Gradle disponibles pour le projet et il n'y en a pas une qui génère un fichier source jar.

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

L'ajout de la source dans le fichier jar qui contient les fichiers de classe compilés serait également une bonne chose.

260voto

JB Nizet Points 250258
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
}

61voto

Chriki Points 371

Solution à partir de Gradle 6.0

En supposant que vous utilisiez le java / java-library avec Gradle 6.0 ou plus récent, vous pouvez obtenir un plugin sourcesJar à l'aide de la configuration suivante :

java {
    withSourcesJar()
    // and/or analogously use “withJavadocJar()” to get a “javadocJar” task
}

Si vous utilisez en plus l'option maven-publish / ivy-publish (recommandé de nos jours), ce dernier publiera également un fichier *-sources.jar avec votre principale publication Java.

Voir aussi la documentation Gradle .

54voto

Giordano Points 1323

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
}

de aquí

44voto

MichaelOryl Points 487

Si vous souhaitez ajouter les sources au fichier JAR des classes compilées ce qui, d'après vous, serait acceptable, vous pouvez le faire assez facilement. Il suffit d'ajouter ce qui suit à votre fichier de compilation. Vous pouvez voir que, en théorie, c'est tout à fait comme la solution pour mettre les sources dans un JAR 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.

12voto

Ali Points 50

Cela devrait fonctionner

assemble.dependsOn 'propertyJar'

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X