在gradle中,我需要通过taskB从taskA执行后创建的文件中创建一个jar。 TaskA没有显式的输出目录。代码如下所示:
task taskA << {
//do sth during execution
}
task taskB(type:Jar) {
//how should I fill the "from" method to achieve my goal
from('a folder')
archiveName = 'A.jar'
destinationDir = file('destination')
}
期待你的回答,thx!
以下内容已于2015-8-2添加(更新):
真的很抱歉之前的描述不准确。
答案显示到现在为止我已经拿出来了。但他们无法实现我的目标。
准确地说,&#34; taskA&#34;是一个android项目中一个模块的内置任务,&#34; assembleDebug&#34;任务。此模块依赖于同一项目中的其他模块。因此,当通过执行&#34; assembleDebug&#34; /&#34; assembleRelease&#34;编译此模块时,其他模块也将被编译并通过将每个其他模块编译的.class文件链接到此模块中的jar来链接#39; s文件夹。
我需要打包所有这些模块&#39;将 .class 文件编译为一个 jar文件,而不是将jar文件打包到jar文件中,在&#34; taskB&#34;。
如您所见,不仅有一个源文件夹,而且文件夹不是任务的输出。所以我没有&#39;知道使用&#34;来自任务&#39; s输出的方法&#34;表格可以满足我的要求。
是否有有效的解决方案?
答案 0 :(得分:0)
如果taskA具有例如'Copy'
类型,那么您的工作应该如下:
task taskA(type: Copy) {
// do sth
}
task taskB(type: Jar) {
from taskA
}
答案 1 :(得分:0)
以下是如何将依赖项的类和当前项目的类组合到一个JAR中的示例:
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile project(':depA')
}
task unzipAllClasses(type: Copy) {
inputs.files(jar)
inputs.files(configurations.compile)
from configurations.compile.collect { zipTree(it) }, jar.outputs.files.collect { zipTree(it) }
into new File(buildDir, "combined-classes")
}
task combinedJar(type: Jar) {
from unzipAllClasses
archiveName 'combined-with-deps.jar'
}
assemble.dependsOn combinedJar
您仍然必须确保在组合的JAR文件中结束的清单包含您想要的内容,并且您必须以某种方式发布此内容,而不会在项目的类路径上引入重复的类,具体取决于此项目。