gpt4 book ai didi

Gradle - 我可以在项目依赖项中包含任务的输出吗

转载 作者:行者123 更新时间:2023-12-04 04:04:43 30 4
gpt4 key购买 nike

我有一个从这些源生成java源和一组jar的任务(比如,项目a)。我想将这些 jar 导出到依赖项目(例如项目 b )。所以这大致是我现在所拥有的:

//a.gradle

configurations{
generatedJars
}

task generateJars(type: JavaExec) {
//generate jars ...

outputs.files += //append generated jars here
}

dependencies{
generatedJars generateJars.outputs.files
}


//b.gradle

dependencies{
project(path: ':a', configuration: 'generatedJars')
}

它工作正常,除了添加 generateJars.outputs.files因为依赖项不会告诉 gradle 它必须运行 generateJars还没有生成 jar 时的任务。我尝试将任务本身添加为依赖项,希望它的工作方式与将 jar/zip 任务添加到工件配置(例如 artifacts{ myJarTask } )时的工作方式相同,但它会抛出一个错误,告诉我我不能那样做。当然我可以注入(inject) generateJars :b 之前的构建过程中某处的任务开始评估,但这既笨拙又脆弱,所以我想避免它。

我觉得我应该将生成的 jar 添加到 artifacts{ ... }的项目,但我不知道如何使它们对依赖项目可见。有没有更好的方法来实现这一目标?

依赖项目(项目 b )需要设置 IntelliJ IDEA 模块类路径以指向项目 a的生成的 jar 。有点像这样(伪代码):

//b.gradle

idea{
module{
scopes.COMPILE.plus += project(path: ':a', configuration: 'generatedJars').files
}
}

到目前为止,我已经尝试简单地在 :a 上添加项目依赖。的 generatedJars:b , 但 Idea 插件只是添加了模块 :a作为模块依赖并假定它导出其生成的 jars(这可能是一个正确的假设),因此不将生成的 jars 添加到 :b的类路径。

任何帮助将不胜感激!

最佳答案

首先,您需要单独的配置吗?也就是说,你有没有a的客户?那不应该看到生成的 jar ?如果没有,您可以将生成的 Jars 添加到 archives配置,这将简化事情。

其次,将生成的 Jars 添加到配置中的正确方法是(而不是 dependencies block ):

artifacts {
generatedJars generateJars
}

这应该确保 generateJars任务在需要时自动运行。

第三,我会省略 +=outputs.files 之后,尽管它可能没有什么不同。您还应该添加必要的输入。

四、为什么需要 JavaExec生成 jar 的任务?您可以将生成的源代码添加到某个源集并让 Gradle 构建它们吗?

第五,IDEA没有对应Gradle的项目配置依赖的概念。一个 IDEA 模块要么完全依赖于另一个模块,要么完全不依赖。您有两个选择:要么使用模块依赖项并将生成的源代码作为依赖模块的源文件夹(最好在 Gradle 和 IDEA 构建中),或者将生成的 Jars 作为外部依赖项传递给 IDEA。无论哪种情况,您都应该从 ideaModule 添加一个任务依赖项。到适当的生成任务。如果这仍然不能带来令人满意的 IDEA 设置,您可以考虑将 Jars 的生成移到单独的子项目中。

关于Gradle - 我可以在项目依赖项中包含任务的输出吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12691107/

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