Как построить кувшин источников с gradle

Я работаю с проектом с открытым исходным кодом, который построен с помощью gradle. Я хотел бы сгенерировать файл (project) -sources.jar, который я могу загрузить в свою IDE (IntelliJ IDEA) и отладить проект. Я знаю, как загрузить файл, если я могу его создать.

Я просмотрел доступные gradle задачи для проекта, и нет ни одного, который генерирует файл jar источника.

Каков самый простой способ сгенерировать файл jar источника для этого проекта?

Добавление источника в файл jar, который содержит скомпилированные файлы классов, также будет прекрасным.

Ответ 1

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
}

Ответ 2

Если вы используете 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
}

из здесь

Ответ 3

Если вы хотите добавить источники в файл JAR скомпилированных классов, который, как вы сказали, будет приемлемым, вы можете сделать это достаточно легко. Просто добавьте следующее в файл сборки. Вы можете видеть, что теоретически это похоже на решение для размещения источников в отдельном JAR:

 jar {
     from sourceSets.main.allSource
 }

Разница в том, что вы добавляете его в основной файл JAR, говоря "jar" вместо sourceJar.

Ответ 4

это должно работать

assemble.dependsOn 'propertyJar'

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

Ответ 5

Эквивалентом Kotlin DSL будет:

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