Jak budować sources jar z gradle

Pracuję z projektem open source, który jest zbudowany z gradle. Chciałbym wygenerować (projekt) - źródła.plik jar, który mogę załadować do mojego IDE (IntelliJ IDEA) i debugować przez projekt. Wiem, jak załadować plik, jeśli mogę go wygenerować.

Przejrzałem dostępne zadania gradle dla projektu i nie ma takiego, które generuje plik JAR źródeł.

Jaki jest najprostszy sposób na wygenerowanie pliku sources jar dla tego projektu?

Dodawanie źródło do pliku jar, który zawiera skompilowane pliki klas, byłoby również w porządku.

Author: Paul D. Eden, 2012-07-13

5 answers

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
Author: JB Nizet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-13 17:05:53

Jeśli używasz Androida:

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
}

From here

 46
Author: Giordano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-10 16:45:08

Jeśli chcesz dodać źródła do skompilowanego pliku klas Jar, który również powiedziałeś, że będzie akceptowalny, możesz to zrobić z łatwością. Wystarczy dodać następujące elementy do pliku kompilacji. Widać, że teoretycznie jest to całkiem jak rozwiązanie do umieszczania źródeł w osobnym słoiku:

 jar {
     from sourceSets.main.allSource
 }

Różnica polega na tym, że dodajesz go do głównego pliku JAR, mówiąc "jar" zamiast sourcesJar.

 31
Author: Michael Oryl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-10 16:47:59

To powinno zadziałać

assemble.dependsOn 'propertyJar'

task propertyJar(type: Jar) {
 archiveName = "myJarName.jar"
 from('src/main/resources') {
    include '**'
 }}
 9
Author: Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-09 11:31:54

Odpowiednikiem DSL Kotlina będzie:

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
Author: wheleph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-03 03:12:19