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.

9voto

Artem Areshko Points 149

Lors de l'utilisation :

  • Gradle : 5+
  • java y maven-publish plugins

    task sourceJar(type: Jar) { from sourceSets.main.allJava archiveClassifier = "sources" }

    publishing { publications { maven(MavenPublication) { from components.java artifact sourceJar } } }

https://docs.gradle.org/current/dsl/org.gradle.api.publish.maven.MavenPublication.html

7voto

wheleph Points 1106

L'équivalent en DSL Kotlin 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)
    }
}

2voto

Mahozad Points 1573

Voici comment j'ai inclus Dokka (voir l'article en ligne ) et les sources des JARs pour ma bibliothèque Kotlin pour Android en utilisant DSL Kotlin (build.gradle.kts) :

plugins {
    // ...
    id("org.jetbrains.dokka") version "1.4.32"
    id("maven-publish")
}

lateinit var sourcesArtifact: PublishArtifact
lateinit var javadocArtifact: PublishArtifact

tasks {
    val sourcesJar by creating(Jar::class) {
        archiveClassifier.set("sources")
        from(android.sourceSets["main"].java.srcDirs)
    }
    val dokkaHtml by getting(org.jetbrains.dokka.gradle.DokkaTask::class)
    val javadocJar by creating(Jar::class) {
        dependsOn(dokkaHtml)
        archiveClassifier.set("javadoc")
        from(dokkaHtml.outputDirectory)
    }
    artifacts {
        sourcesArtifact = archives(sourcesJar)
        javadocArtifact = archives(javadocJar)
    }
}

publishing {
    // ...
    publications {
        create<MavenPublication>("MyPublication") {
            from(components["release"])
            artifact(sourcesArtifact)
            artifact(javadocArtifact)
            // ...
        }
    }
}

0voto

Nick Unuchek Points 139

Android :

  task androidSourcesJar(type: Jar) {
        getArchiveClassifier().set('sources')
        from android.sourceSets.main.java.srcDirs//full sources
  }

Java :

 task sourcesJar(type: Jar, dependsOn: classes) {
        getArchiveClassifier().set('sources')
        from sourceSets.main.allSource
    }

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