web-dev-qa-db-fra.com

Comment construire un bocal de sources avec gradle

Je travaille avec un projet open source construit avec gradle. Je souhaite générer un fichier (projet) -sources.jar que je peux charger dans mon IDE (IntelliJ IDEA)) et procéder au débogage via le projet. Je sais comment charger le fichier si je le peux. le générer.

J'ai parcouru les tâches de gradles disponibles pour le projet et aucune ne génère de fichier JAR de sources.

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

Ajouter la source dans le fichier jar contenant les fichiers de classe compilés conviendrait également.

137
Paul D. Eden
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
}
229
JB Nizet

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 ici

47
Giordano

Si vous souhaitez ajouter les sources au fichier JAR des classes compilées, que vous avez également déclaré acceptable, vous pouvez le faire assez facilement. Ajoutez simplement ce qui suit à votre fichier de construction. Vous pouvez voir qu'en théorie, c'est tout à fait la solution pour mettre des sources dans un fichier 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.

33
Michael Oryl

cela devrait fonctionner

assemble.dependsOn 'propertyJar'

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

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)
    }
}
3
wheleph