首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Jenkins Grails插件中启动的grails测试不会接收gradle build生成的jars

从Jenkins Grails插件中启动的grails测试不会接收gradle build生成的jars
EN

Stack Overflow用户
提问于 2018-07-19 03:01:30
回答 1查看 157关注 0票数 0

我有一个大型项目,我正在帮助从Grails 2.5迁移到Grails 3和Gradle。在短期内,我们正在将大部分业务代码转移到框架无关的gradle模块中,然后将它们导入到grails2.5,最终计划转移到一个完整的grails-3构建中。

移徙办法计划是:

  • 创建gradle模块并将大部分代码移动到这些模块中。
  • 让grails执行gradle构建
  • Gradle将每个模块构建的结果放到/lib目录中
  • Grails在类路径上找到它们并使用它们
  • 我没有在BuildConfig.groovy中指定依赖项,我只是使用grails代码中的类,在应用程序启动的编译阶段,所有的东西都在那里。

这在当地非常有效。我可以从源代码管理中重新签出项目开始,执行grails run-app --refresh-dependencies (或grails run-app --refresh-dependencies目录)。

这不适用于詹金斯。我正在使用Jenkins Gradle插件。Jenkins无法解析我的(单个POC)类:

代码语言:javascript
复制
   [groovyc] /mnt/jenkins/workspace/Java8/Steps/MyApp-Grails-2.5.2-Java8-Pull-Request-Unit-Tests
    /src/groovy/com/myapp/package/SomeServiceWithADependency.groovy: 
    10: unable to resolve class com.myapp.module.util.MyUtil
   [groovyc]  @ line 10, column 1.
   [groovyc]    com.myapp.module.util.MyUtil
   [groovyc]    ^

以下是我尝试过的:

  • 我选中了让Jenkins将--refresh-dependencies标志添加到所有构建周期命令的框
  • lib/目录中还有另外3个jars,它们被签入git源代码管理。Grails发现那些没有问题。
  • 我在gradle模块构建的末尾添加了一个print语句来告诉我/lib目录中的是什么,我同时也在生成依赖项和签入源代码管理的依赖项。它们似乎在那里,并且路径与预期的工作区路径相匹配。

有什么想法吗?希望地球上有人处理过类似的问题

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-26 22:00:18

我们解决了这个问题。构建在本地运行是因为gradle的缓存,并且远程失败是因为Jenkins正在使用一个新的存储库。

考虑到从git的干净拉动开始,执行单个grails命令以构建gradle模块并拉入依赖项的要求,我们的解决方案是首先使用gradlew shell脚本构建gradle,如果gradle构建失败,则失败:

代码语言:javascript
复制
(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)来执行任何grails任务,并且所有jenkins构建都进行了相应的修改。
  • 任何模块中的任何传递依赖项也必须添加到BuildConfig.groovy中,以便grails在运行时将它们放到类路径上。在BuildConfig.groovy中添加依赖项失败不会引发编译时错误,但在运行时没有类def会导致崩溃。

然而,模块化构建的好处,尤其是它已经给代码组织带来的纪律,以及了解我们的应用程序代码的很大一部分是框架无关的舒适,这些都是值得的。

希望这能帮到其他人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51413709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档