【发布时间】:2018-07-19 03:01:30
【问题描述】:
我有一个大型项目,我正在帮助从 Grails 2.5 迁移到 Grails 3 和 Gradle。在短期内,我们会将大部分业务代码转移到与框架无关的 gradle 模块中,然后将它们导入 grails 2.5,最终计划转移到完全 grails-3 构建。
迁移方法计划是:
创建 gradle 模块并将大部分代码移动到这些模块中。
让 grails 执行 gradle 构建
Gradle 将每个模块的构建结果放到 /lib 目录中
Grails 在类路径中找到它们并使用它们
我没有在
BuildConfig.groovy中指定依赖项,我只是使用 grails 代码中的类,结果在应用程序启动的编译阶段一切都在那里。
这在本地非常有效。我可以从源代码管理中重新检出项目,执行grails run-app --refresh-dependencies(或test-app), and see the result of my build. I've found that--refresh-dependenciesis a magic grails voodoo that tells grails that it might find some classes it needs in itslib/`目录。
这不适用于 Jenkins。我正在使用 Jenkins Gradle 插件。 Jenkins 无法解析我的(单 POC)类:
[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 个其他 jar,已签入 git 源代码控制。 Grails 会找到那些没有问题的。我在 gradle 模块构建的末尾添加了一条打印语句,以告诉我
/lib目录中的内容,并且我同时生成了 gradle 依赖项和已签入源代码控制的依赖项。它们似乎在那里,并且路径与预期的工作区路径相匹配。
有什么想法吗?希望地球上有人处理过类似的问题
【问题讨论】:
标签: java jenkins gradle grails groovy