我有一个任务,从这些来源(比如项目a)生成java源和一组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')
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,除了generateJars.outputs.files作为依赖项添加并不告诉gradle generateJars当没有生成jar时它必须运行任务.我已经尝试将任务本身添加为依赖项,希望它的工作方式与将jar/zip任务添加到工件配置时的工作方式相同(例如artifacts{ myJarTask }),但它会抛出错误告诉我我不能这样做.当然,我可以generateJars在:b开始评估之前在构建过程中的某个地方注入任务,但这是笨拙和脆弱的,所以我想避免它.
我觉得我应该将生成的jar添加到artifacts{ ... }项目中,但我不确定如何使它们对依赖项目可见.有没有更好的方法来实现这一目标?
依赖项目(项目b)需要设置IntelliJ IDEA模块类路径以指向项目a生成的jar.像这样的东西(伪代码):
//b.gradle
idea{
module{
scopes.COMPILE.plus += project(path: ':a', configuration: 'generatedJars').files
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试简单地增加一个项目dependecy :a的generatedJars的:b,但理念插件只是增加了模块:a作为一个模块依赖,假定它出口其产生的瓶(这可能是一个正确的假设),因此不能将所产生的罐子:b的阶级路径.
任何帮助将不胜感激!
首先,您需要单独的配置吗?也就是说,您是否有客户端a不应看到生成的 Jars?如果没有,您可以将生成的 Jars 添加到archives配置中,这将简化事情。
其次,将生成的 Jars 添加到配置中的正确方法是(而不是块dependencies):
artifacts {
generatedJars generateJars
}
Run Code Online (Sandbox Code Playgroud)
这应该确保generateJars任务在需要时自动运行。
第三,我会省略+=after outputs.files,尽管它可能没有什么区别。您还应该添加必要的输入。
第四,为什么需要JavaExec任务来生成 Jars?您可以将生成的源添加到某些源集并让 Gradle 构建它们吗?
第五,IDEA没有对应Gradle的项目配置依赖的概念。IDEA 模块要么完全依赖于另一个模块,要么根本不依赖。您有两个选择:要么使用模块依赖项并将生成的源作为依赖模块的源文件夹(最好在 Gradle 和 IDEA 构建中),要么将生成的 Jars 作为外部依赖项传递给 IDEA。无论哪种情况,您都应该将任务依赖项添加ideaModule到适当的生成任务中。如果这仍然不能带来令人满意的 IDEA 设置,您可以考虑将 Jars 的生成移至单独的子项目中。
| 归档时间: |
|
| 查看次数: |
6520 次 |
| 最近记录: |