在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')
}期待着你的回答,泰克斯!
2015年增加(更新)如下-8-2:
真的很抱歉之前的描述不准确。
答案显示,直到现在,我已经想出了它们。但他们无法达到我的目标。
确切地说,"taskA“是安卓项目中一个模块的内置任务,即"assembleDebug”任务。这个模块依赖于这个项目中的其他一些模块。因此,当通过执行"assembleDebug"/"assembleRelease“来编译该模块时,其他模块也将被编译,并通过使彼此编译的.class文件链接到该模块文件夹中的jar中。
我需要将所有这些模块的编译好的.class文件打包到one jar文件中,而不是将jar文件打包到jar文件中,放在"taskB“中。
如您所见,不仅有一个源文件夹,而且文件夹不是任务的输出。因此,我不知道使用“从任务输出”表单的方法是否能够满足我的要求。
有有效的解决办法吗?
发布于 2015-07-31 16:45:22
下面是一个示例,说明如何将当前项目的依赖类和类组合到一个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文件中的清单包含您想要的内容,并且您必须以某种方式发布这个清单,而不必根据这个项目在项目的类路径上引入重复的类。
发布于 2015-07-31 14:57:19
如果taskA具有例如'Copy'类型,那么您的工作应该非常简单:
task taskA(type: Copy) {
// do sth
}
task taskB(type: Jar) {
from taskA
}https://stackoverflow.com/questions/31744000
复制相似问题