首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何利用gradle中其他任务创建的文件创建jar文件?

如何利用gradle中其他任务创建的文件创建jar文件?
EN

Stack Overflow用户
提问于 2015-07-31 10:31:11
回答 2查看 563关注 0票数 0

在gradle中,我需要使用taskB在执行taskA之后创建的文件创建一个jar。TaskA没有显式输出目录。代码如下:

代码语言:javascript
运行
复制
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“中。

如您所见,不仅有一个源文件夹,而且文件夹不是任务的输出。因此,我不知道使用“从任务输出”表单的方法是否能够满足我的要求。

有有效的解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-31 16:45:22

下面是一个示例,说明如何将当前项目的依赖类和类组合到一个JAR中:

代码语言:javascript
运行
复制
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文件中的清单包含您想要的内容,并且您必须以某种方式发布这个清单,而不必根据这个项目在项目的类路径上引入重复的类。

票数 0
EN

Stack Overflow用户

发布于 2015-07-31 14:57:19

如果taskA具有例如'Copy'类型,那么您的工作应该非常简单:

代码语言:javascript
运行
复制
task taskA(type: Copy) {
  // do sth
}

task taskB(type: Jar) {
  from taskA
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31744000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档