如何从gradle中的其他任务创建的文件中制作jar文件?

时间:2015-07-31 10:31:11

标签: jar gradle

在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;表格可以满足我的要求。

是否有有效的解决方案?

2 个答案:

答案 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文件中结束的清单包含您想要的内容,并且您必须以某种方式发布此内容,而不会在项目的类路径上引入重复的类,具体取决于此项目。