将项目组合到一个JAR中

时间:2014-09-22 04:30:42

标签: jar merge gradle

我正在尝试将4个项目合并为一个这样的JAR

jar {
    from {
        project(":p1").sourceSets.main.output.classesDir
        project(":p2").sourceSets.main.output.classesDir
        project(":p3").sourceSets.main.output.classesDir
    }
}

它有点工作,那里有三个项目的部分,但不完整。每当有一个像p1/mypackagep2/mypackage这样的公共目录时,Gradle就无法合并它们并且(我认为)最后一个目录。所以不要合并

p1
  mypackage
    MyFirst.class
p2
  mypackage
    MySecond.class

mypackage
    MyFirst.class
    MySecond.class

我只有一节课。没有警告。这是预期还是错误(我希望如此)?我可以以某种方式避免它吗?


正如答案所述,我做错了。与

jar {
    from {[
        project(":p1").sourceSets.main.output.classesDir,
        project(":p2").sourceSets.main.output.classesDir,
        project(":p3").sourceSets.main.output.classesDir
    ]}
}
它似乎有效。


但这更好:

jar {
    from {[":p1", ":p2", ":p3"].collect {project(it).sourceSets.main.output.classesDir}}
}

1 个答案:

答案 0 :(得分:0)

只有闭包的返回值很重要,所以前两行是no-ops。此外,需要建立必要的任务依赖性。尝试:

jar {
    from { subprojects.sourceSets.main.output }
}

SourceSetOutputBuildable,这意味着Gradle可以自动推断任务依赖项。)