How to build sources jar with gradle
我正在使用gradle构建的开源项目。 我想生成一个(project)-sources.jar文件,可以将其加载到我的IDE(IntelliJ IDEA)中并通过该项目进行调试。 我知道如何生成文件(如果可以生成的话)。
我浏览了该项目可用的gradle任务,但没有一个可生成source jar文件的任务。
为该项目生成源jar文件的最简单方法是什么?
将源添加到包含已编译的类文件的jar文件中也可以。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 } |
如果您使用的是Android:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 } |
从这里
如果您希望将源添加到已编译的类JAR文件中(您也说可以接受),则可以轻松完成此操作。只需将以下内容添加到您的构建文件中即可。您可以看到,从理论上讲,这就像将源放入单独的JAR的解决方案一样:
1 2 3 | jar { from sourceSets.main.allSource } |
不同之处在于,您是通过说" jar"来代替sourcesJar来将其添加到主JAR文件中的。
这应该工作
1 2 3 4 5 6 7 | assemble.dependsOn 'propertyJar' task propertyJar(type: Jar) { archiveName ="myJarName.jar" from('src/main/resources') { include '**' }} |
从Gradle 6.0开始的解决方案
假设您在Gradle 6.0或更高版本中使用
1 2 3 4 | java { withSourcesJar() // and/or analogously use"withJavadocJar()" to get a"javadocJar" task } |
如果您另外使用
另请参阅Gradle文档。
Kotlin DSL等效项为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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) } } |
使用时:
- 摇篮:5+
-
java 和maven-publish 插件
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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