我有一个gradle任务来创建一个包含Java 源文件的jar文件,以包含在Android aar库包中。这些文件将作为JNI的Javadoc,也可以作为捆绑在aar包中的C ++库。
我无法弄明白如何包含 jar文件,而不是编译其中的文件。似乎jar文件中的Java文件是编译的,这对我没有帮助 - 我只想包含它们,以便开发人员可以使用该aar包
创建的jar文件包含所有源代码,并且位于其libs
目录中的输出中,但它没有内容。
如何将Java源添加到我的aar?
Jar创建
Jar创建如下,最终位于我模块的build/libs
文件夹中。
task generateMySources(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
artifacts {
archives generateMySources
}
preBuild.dependsOn(":myModule:generateMySources")
dependencies {
// The jar is included but it is empty inside the aar.
compile files('build/libs/myModule-sources.jar')
}
输出jar包含:
.
├── com
│ └── my
│ └── app
│ └── jni
│ ├── File1.java
│ ├── File2.java
│ ├── File3.java
│ └── File4.java
└── META-INF
└── MANIFEST.MF // Contains "Manifest-Version: 1.0" only.
jar存在于libs
目录内的aar内部,但现在它是空的。
答案 0 :(得分:2)
我唯一想到的就是在你的内容构建完成之后将你的源添加到.aar文件中
task generateMySources(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
task addMySourcesToAar(type: Jar) {
archiveName "myModuleWithSources.aar"
destinationDir file("build")
from zipTree("build/outputs/aar/myModule-release.aar")
from fileTree("build").include("libs/myModule-sources.jar")
}
afterEvaluate { project ->
project.tasks.preBuild.dependsOn generateMySources
project.addMySourcesToAar.dependsOn build
}
artifacts {
archives addMySourcesToAar.archivePath
}
并运行
./gradlew myModule:addMySourcesToAar
我没有像你那样向依赖项添加任何东西
答案 1 :(得分:2)
因此,谁在使用Gradle Kotlin DSL:
tasks.register<Jar>(name = "sourceJar") {
from(android.sourceSets["main"].java.srcDirs)
classifier = "sources"
}
publishing {
publications {
create<MavenPublication>(name = "Maven") {
run {
groupId = "groupId"
artifactId = "module-name"
version = "1.0"
artifact("$buildDir/outputs/aar/module-name-release.aar")
artifact(tasks["sourceJar"])
}
}
}
}