Java Gradle可以将多个项目放入一个jar中吗?
Gradle可以将多个项目放入一个jar中吗 我知道您可以使用以下方法为单个项目执行此操作:Java Gradle可以将多个项目放入一个jar中吗?,java,build,gradle,Java,Build,Gradle,Gradle可以将多个项目放入一个jar中吗 我知道您可以使用以下方法为单个项目执行此操作: task packageTests(type: Jar) { from sourceSets.test.classes } 但是一个人如何将多个子项目压缩到一个jar中呢 我试过这个,但不起作用: task packageTests(type: Jar) { from project(':core').sourceSets.main.classes from project(':core:
task packageTests(type: Jar) {
from sourceSets.test.classes
}
但是一个人如何将多个子项目压缩到一个jar中呢
我试过这个,但不起作用:
task packageTests(type: Jar) {
from project(':core').sourceSets.main.classes
from project(':core:google').sourceSets.test.classes
from project(':core:bing').sourceSets.test.classes
}
这应该适用于你想做的事情。这应该在根gradle构建文件中
subprojects.each { subproject -> evaluationDependsOn(subproject.path)}
task allJar(type: Jar, dependsOn: subprojects.assemble) {
baseName = 'your-base-name'
subprojects.each { subproject ->
from subproject.configurations.archives.allArtifacts.files.collect {
zipTree(it)
}
}
}
您可以通过将其添加为存档来发布:
artifacts {
archives allJar
}
这是我的解决方案,简单一点:
// Create a list of subprojects that you wish to include in the jar.
def mainProjects = [':apps',':core',':gui',':io']
task oneJar( type: Jar , dependsOn: mainProjects.collect{ it+":compileJava"}) {
baseName = 'name of jar'
from files(mainProjects.collect{ project(it).sourceSets.main.output })
}
代码已经在Gradle 1.12上进行了测试,下面的解决方案与提出的非常类似,但直接使用jar任务
subprojects.each { subproject -> evaluationDependsOn( subproject.path ) }
jar.dependsOn subprojects.tasks['classes']
jar {
baseName = 'MyApp'
manifest {
attributes 'Main-Class': 'org.abc.App'
}
subprojects.each { subproject ->
from subproject.sourceSets.main.output.classesDir
from subproject.sourceSets.main.output.resourcesDir
}
}
它是针对Gradle 2.1和2.2.1进行测试的,我知道这已经得到了回答,但由于答案是旧的(当前的Gradle版本是一些较新的主要版本-6.2.2),并且这个线程在搜索引擎中显示得相当高,我将发布适合我的解决方案 一般来说,我的问题与原始帖子中的问题相似/相同:我希望从所有子项目中获取类,并将它们压缩到一个jar中(最好使用尽可能多的默认设置)。最后,我发现以下代码实现了这一点:
jar {
from subprojects.sourceSets.main.output
}
但是在正确构建jar的同时,我还希望能够将这个jar作为单个工件发布到Maven存储库,这取决于所有子项目所做的一切。为了实现这一点,主项目必须依赖于子项目依赖关系,该依赖关系由以下人员完成:
subprojects.each { evaluationDependsOn(it.path) }
dependencies {
api(externalSubprojectsDependencies('api'))
implementation(externalSubprojectsDependencies('implementation'))
}
private externalSubprojectsDependencies(String configuration) {
subprojects.collect { it.configurations[configuration].allDependencies }.flatten()
.findAll { !it.properties['dependencyProject'] } // this looks like hack, I'd love to see better solution
}
只复制外部依赖项-我们不希望内部(项目)依赖项列在
pom.xml
中,因为它们的所有类都在jar中。您可以使用、OneJar或。所有3个都是特定于项目的。它们都不会压缩根项目及其所有子项目。所有这些项目都基于项目所应用的模型,其他项目作为依赖项。OneJar显然是一个压缩单个项目并将所有依赖项包含在.jar中的项目。对我来说,这并不能解决这个特殊的问题。“应用程序压缩”不起作用,因为GitHub已经为我做了。我试过fatJar,但指令不起作用,Gradle也无法编译我的脚本。将fatJar应用于您的项目所需的更改。只要运行gradlefatjar
。这个答案几乎回答了我的问题。它给了我很多我尝试过的想法,但我从未解决过。gradle编译器给了我一个错误:在项目上找不到属性“Assembly”。我试着用各种方法来解决这个问题,但都做不到。我用的是Gradle1.2。我仍然充满希望,并且仍在努力。你可以尝试阅读Gradle的文档。听起来你好像是在复制和粘贴,什么都没用“汇编”是java插件提供给您的一个属性。如果您的一个子项目没有java插件,那么您将得到您提到的错误。我在“allprojects”部分添加了java插件。这对我所有的子项目都有效吗?在任何情况下,我都是专门为抱怨的项目添加java插件的,但没有任何帮助。今晚我将尝试在GitHub上提供一个更简单的示例,以获得更好的帮助。嗨,我是gradle的新手。gradle编译器在我尝试此操作时给出了错误。在根项目“Gradle root”上找不到参数[任务]:allJar“]的方法存档()。请帮助我有一个名为buildRepackage
的任务,我想这就是这个任务的作用,但是我不能使一个jar在整个依赖项下都可以运行。你知道它们是如何协同工作的,以及我如何为spring boot应用程序完成这项工作的吗?我有一个名为buildRepackage
的任务,我想这就是任务的作用,但我不能让一个jar在整个依赖项下都能运行。您知道它们是如何协同工作的吗?我如何为spring boot应用程序实现这一点?