我是Gradle的新手,我遇到了问题(使用Gradle 2.14)
我的项目有3个子项目:assembly,sprinBootProject,E2E
装配模块负责将弹簧启动应用程序的jar与属性文件一起压缩
E2E模块是一个“端到端”的终端'测试模块,用于测试弹簧启动应用程序。
我在assembly / build.gradle中使用分发插件,如下所示:
{% block content %}
REPORTSz id = {{pid }}
{% endblock %}
但是我需要确保在汇编子项目之前评估springBootProject,所以我使用了dependsOn:
apply plugin: 'distribution'
distributions {
main {
baseName "project-assembly"
contents{
from project(':springBootProject').fileTree(dir: 'build/libs', include: ['*.jar'])
from project(':springBootProject').fileTree(dir: 'build/resources/main', includes: ['*.properties', 'conf/*.properties'])
}
}
}
当我添加这一行时,我发现E2E模块在compileTestJava任务中失败,所以这一行影响了Spring启动应用程序的生成方式(我认为)
E2E /的build.gradle:
distZip.dependsOn(':springBootProject:build')
所以我的问题是我做得对吗?为什么当我添加dependsOn行时,E2E模块受到影响,如何强制Gradle在装配模块之前评估弹簧启动应用?
答案 0 :(得分:0)
我明白了。
Gradle将按字母顺序评估模块
所以评估将是:assembly - > E2E - > springBootProject
将此行添加到assembly / build.gradle时:
distZip.dependsOn(':springBootProject:build')
评估的顺序变为:assembly - > springBootProject - > E2E
现在在' springBootProject'模块我使用spring boot插件生成可执行jar,这个可执行jar是由任务生成的:springBootProject:bootRepackage,它使用由:springBootProject:jar任务生成的jar并将其转换为可执行文件。
现在因为' E2E'模块依赖于springBootProject'它将使用它的jar,但现在这个jar是可执行的,因此我在E2E'中有编译错误。
所以我必须确保' E2E' module获取原始jar而不是可执行jar。 所以我在springBootProject / build.gradle中添加了这一行:
bootRepackage.mustRunAfter(':E2E:test')
似乎解决了这个问题