Java 从Jenkins Grails插件启动的Grails测试没有';t拾取gradle构建生成的jar
我有一个大型项目,我正在帮助从Grails2.5迁移到Grails3和Gradle。短期内,我们正在将大部分业务代码迁移到与框架无关的gradle模块中,然后将它们导入Grails2.5,最终计划迁移到完全的grails-3构建 迁移方法计划是:Java 从Jenkins Grails插件启动的Grails测试没有';t拾取gradle构建生成的jar,java,jenkins,gradle,grails,groovy,Java,Jenkins,Gradle,Grails,Groovy,我有一个大型项目,我正在帮助从Grails2.5迁移到Grails3和Gradle。短期内,我们正在将大部分业务代码迁移到与框架无关的gradle模块中,然后将它们导入Grails2.5,最终计划迁移到完全的grails-3构建 迁移方法计划是: 创建gradle模块并将大部分代码移到这些模块中 让grails执行gradle构建 Gradle将每个模块的构建结果放入/lib目录 Grails在类路径上找到它们并使用它们 我没有在BuildConfig.groovy中指定依赖项,我只是使用gr
- 创建gradle模块并将大部分代码移到这些模块中
- 让grails执行gradle构建
- Gradle将每个模块的构建结果放入/lib目录
- Grails在类路径上找到它们并使用它们
- 我没有在
中指定依赖项,我只是使用grails代码中的类,在应用程序启动的编译阶段,所有东西都在那里BuildConfig.groovy
grailsrunapp--refresh dependencies
(或testapp),并查看构建的结果。我发现,
--refresh dependencies是一个神奇的grails巫术,它告诉grails它可能会在它的
lib/`目录中找到它需要的一些类
这对詹金斯不起作用。我正在使用Jenkins Gradle插件。Jenkins无法解析我的(单身,POC)类:
以下是我尝试过的:
- 我选中了Jenkins的复选框,将
标志添加到所有构建周期命令中--refresh dependencies
目录中还有另外3个jar,已签入git源代码管理。Grails可以找到没有问题的lib/
- 我已经在gradle模块构建的末尾添加了一个print语句,告诉我
目录中有什么,并且我知道gradle正在生成的依赖项和签入源代码管理的依赖项。它们似乎在那里,并且路径与预期的工作区路径匹配/lib
有什么想法吗?希望地球上有人处理过类似的问题,我们解决了这个问题。由于gradle的缓存,构建在本地工作,而由于Jenkins正在使用新的存储库,构建在远程失败 考虑到从git repo的干净拉入开始,执行单个grails命令来构建gradle模块并拉入依赖项的要求,我们的解决方案是首先使用
gradlew
shell脚本来构建gradle,如果gradle构建失败则失败:
(exec ./modules/gradlew -p modules build jar publishToMavenLocal); gradlew_return_code=$?
if [ "$gradlew_return_code" -eq "0" ]; then
echo "Gradle build task success!"
else
echo "Gradle build task failed with return code $gradlew_return_code; aborting."
exit -1
fi
缺点是:
- 所有从事该项目的开发人员都必须使用
(而不是/grailsw
)来执行任何grails任务,并且所有jenkins构建都已相应地修改grails
- 任何模块内的任何可传递依赖项也必须添加到
中,以便grails在运行时将它们放在类路径上。未能在BuildConfig.groovy
中添加依赖项不会引发编译时错误,但会在运行时由于没有类定义而崩溃BuildConfig.groovy
(exec ./modules/gradlew -p modules build jar publishToMavenLocal); gradlew_return_code=$?
if [ "$gradlew_return_code" -eq "0" ]; then
echo "Gradle build task success!"
else
echo "Gradle build task failed with return code $gradlew_return_code; aborting."
exit -1
fi