如何使用gradle构建源jar

Pau*_*den 143 java jar gradle

我正在使用一个用gradle构建的开源项目.我想生成一个(项目)-sources.jar文件,我可以将其加载到我的IDE(IntelliJ IDEA)并通过项目进行调试.如果我可以生成它,我知道如何加载文件.

我查看了项目的可用gradle任务,但没有一个生成源jar文件.

为此项目生成源jar文件的最简单方法是什么?

将源添加到包含已编译类文件的jar文件中也可以.

JB *_*zet 232

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
}
Run Code Online (Sandbox Code Playgroud)

  • 如果我没弄错的话,你也不需要课堂上的dependsOn规范.Gradle查看任务的输入,确定它们的来源,并自动创建依赖项.例如,javadocJar从javadoc中提取文件,因此Gradle将自动添加dependsOn javadoc. (5认同)
  • 我接受这个答案是基于很好的细节和我的假设它适用于使用java插件的gradle项目.不幸的是,它在我的情况下不起作用,因为我正在使用的项目不使用java插件.我得到的错误是"无法在任务上找到属性'sourceSets':sourcesJar'." (4认同)

Gio*_*ano 49

如果您使用的是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
}
Run Code Online (Sandbox Code Playgroud)

这里开始


Chr*_*iki 48

从 Gradle 6.0 开始的解决方案

假设您在Gradle 6.0 或更高版本中使用java/java-library插件,您可以sourcesJar使用以下配置获取任务:

java {
    withSourcesJar()
    // and/or analogously use “withJavadocJar()” to get a “javadocJar” task
}
Run Code Online (Sandbox Code Playgroud)

如果您另外使用maven-publish/ivy-publish插件(现在推荐),那么这也将*-sources.jar与您的主要 Java 出版物一起发布工件。

另请参阅Gradle 文档


Mic*_*ryl 33

如果您希望将源添加到已编译的类JAR文件中,您也说这是可以接受的,您可以轻松地完成此操作.只需将以下内容添加到构建文件中即可.您可以看到,从理论上讲,它非常类似于将源放入单独的JAR的解决方案:

 jar {
     from sourceSets.main.allSource
 }
Run Code Online (Sandbox Code Playgroud)

不同之处在于您通过使用"jar"代替sourcesJar将其添加到主JAR文件中.


Ali*_*Ali 9

这应该工作

assemble.dependsOn 'propertyJar'

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


小智 8

使用时:

  • 等级:5+
  • javamaven-publish插件
task sourceJar(type: Jar) {
    from sourceSets.main.allJava
    archiveClassifier = "sources"
}

publishing {
    publications {
        maven(MavenPublication) {
            from components.java
            artifact sourceJar
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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


whe*_*eph 6

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)
    }
}
Run Code Online (Sandbox Code Playgroud)