将项目合并到单个JAR中

将项目合并到单个JAR中,jar,merge,gradle,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/my

我正试图像这样将4个项目合并到一个JAR中

jar {
    from {
        project(":p1").sourceSets.main.output.classesDir
        project(":p2").sourceSets.main.output.classesDir
        project(":p3").sourceSets.main.output.classesDir
    }
}
这是一种工作,每三个项目都有部分,但不完整。每当有像
p1/mypackage
p2/mypackage
这样的公共目录时,Gradle都无法合并它们,并(我想)使用最后一个目录。因此,与其结合

p1
  mypackage
    MyFirst.class
p2
  mypackage
    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}}
}

只有闭包的返回值才重要,所以前两行不是ops。此外,还需要建立必要的任务依赖关系。尝试:

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

SourceSetOutput
Buildable
,这意味着Gradle可以自动推断任务依赖关系。)

真的吗?那我都做错了。但是我不想要所有的
子项目,只有三个。我可以做一些过滤或加入三组,但你能告诉我怎么做吗?正如你所看到的,我在这里相当无知。
jar {
    from { subprojects.sourceSets.main.output }
}