gpt4 book ai didi

maven - 将通用代码移动到 `subprojects {}` block 中断构建

转载 作者:行者123 更新时间:2023-12-03 05:18:18 26 4
gpt4 key购买 nike

我在 Grade 中有一个多项目(多个 java 子项目),我计划将它上传到一个 maven 存储库(当前是一个本地存储库),包括 sourcesjavadoc文物。我只需将以下代码添加到每个子项目,然后 maven install做这项工作:

apply plugin: 'maven'

task sourcesJar(type: Jar, dependsOn:classes) {
from sourceSets.main.allSource
classifier = 'sources'
}
task javadocJar(type: Jar, dependsOn:javadoc) {
from javadoc.destinationDir
classifier = 'javadoc'
}
artifacts {
archives jar
archives sourcesJar
archives javadocJar
}

现在在 10 个子项目中使用相同的代码并不是很好,所以我决定将这段代码移动到 subprojects { ... }父项目的配置。但是,现在它不再起作用了:只构建空源和 javadoc jar,普通 jar 被忽略, maven install不再将文件复制到本地 Maven 存储库。如何正确地做到这一点?

谢谢。

最佳答案

父项目的构建脚本在其子项目的构建脚本之前被评估。当您将某些代码提升到父项目的构建脚本时,您必须确保评估顺序保持不变,即提升的代码不会急切地读取仅由子项目的构建脚本设置的属性。例如,如果 javadoc.destinationDir由子项目的构建脚本设置,您要么也必须解除该代码,要么推迟对 from javadoc.destinationDir 的评估父构建脚本中的表达式。

有几种延迟评估的技术。一些属性(如归档任务的 frominto )接受闭包;因此你可以简单地做from { javadoc.destinationDir } .另一种选择是使用像 gradle.projectsEvaluated {} 这样的钩子(Hook)。 , project.afterEvaluate {} , 或 task.doFirst {} .决定使用哪种技术的第一步是在 Gradle Build Language Reference 中查找有问题的属性。 .

在没有看到更多构建脚本的情况下,我最好的猜测是您的特定问题与不提升 apply plugin: "java" 相关。进入父构建脚本的subprojects {}堵塞。

配置注入(inject)的替代方法(例如通过 subprojects {} )是将通用代码放入单独的构建脚本中,并让项目构建脚本包含带有 apply from: 的代码.在某些情况下,这比配置注入(inject)更容易(有选择地)共享代码。通常,这两种方法一起使用。

关于maven - 将通用代码移动到 `subprojects {}` block 中断构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14795863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com