如何让 Grails 从 Maven 存储库中获取最新的本地 jars?
Posted
技术标签:
【中文标题】如何让 Grails 从 Maven 存储库中获取最新的本地 jars?【英文标题】:How to make Grails get latest local jars from Maven repository? 【发布时间】:2013-05-07 09:54:53 【问题描述】:-
在我的 Maven 存储库 (.m2) 中。有一个我的本地 jar,例如 sub_app-0.1.jar。
我在常春藤缓存中有相同的副本。
我在 sub_app 上运行
maven install
,然后创建了新的 sub_app-0.1.jar 文件。
之后,我运行 grails clean
并没有从 .m2 获取我的新 sub_app-0.1.jar。
但是,如果我从 ivy-cache 中删除(删除)sub_app-0.1.jar 文件并运行grails clean
,那么它会将新的 sub_app-0.1.jar 文件放入 ivy-cache 中。
如果我在子应用 pom 和 grails pom 中更改版本,并且 Grails 正在使用最新版本。再次安装它不会占用。
我什至尝试将 SNAPSHOT 添加到 sup-app jar 中。同样的结果,第一次服用,后来没有。即。 Grails 只考虑 ivy-cache 中的 jar 名称和版本,如果有的话 - 它不需要。如果没有 - 它取自 .m2。
但它没有考虑新/旧版本。
如何在第 4 步中也获得相同的行为(第 5 步)?
【问题讨论】:
【参考方案1】:更新
您可以尝试在 BuildConfig.groovy 中将 changeing=true 添加到您的依赖项中,如 Grails Guide
中指定的那样compile ('YOUR_GROUP_ID:YOUR_SUB_AP:0.1')
changing = true
【讨论】:
很抱歉,“useOrigin true”不起作用。你能不能给我建议任何其他方式。 我也用过-SNAPSHOT,甚至没有解决,请任何人帮助我【参考方案2】:不确定这是否与您的问题相同,但我使用 Spring Source Tool Suite (STS) 和“grails”项目,该项目依赖于“interfaces”项目(仅包含接口、bean、pojos 等) )。
如果我在 STS 的接口上运行 maven 安装,那么 maven 会正确更新最新的 jar(我使用“-1.0-SNAPSHOT”作为我的版本号)。
如果我随后在 STS 中的“grails”项目上运行 grails clean,Grails 会正确识别接口 jar 的更改(我在 BuildConfig.groovy 中有 changeing=true),下载 pom,但无法下载jar,因为它无法从常春藤缓存中删除 jar。看起来 STS 在 ivy-cache 上有一个句柄,可以防止这种情况发生。
由于我从另一位开发人员那里继承了这个项目,他们告诉我这是 Grails 和/或 STS 的错误/功能,我向他的知识低头并通过以下任一方式解决此问题:
-
maven 包而不是安装在“接口”上,然后将最新的 jar 复制到 ivy-cache。看来 STS 会让我替换 jar 的内容。然后 grails clean 使用来自 ivy-cache 的最新 jar(不尝试从 maven 下载)。
maven 在“interfaces”上安装,关闭 STS,从 ivy-cache 中删除 jar,重新打开 STS,grails clean 从 maven 下载最新的 jar。
这两种解决方法都很痛苦,所以如果有人有任何想法,我会很感兴趣?
【讨论】:
哦,我正在使用 grails v2.0.1 和 sts v2.9.1.RELEASE,如果有帮助的话。 我正在使用 Grails 2.1.4 和 Groovy 2.0.4 和 java 1.7,我觉得这不是一个好主意 - 每次都从 ivy-cache 中删除。【参考方案3】:Grails 不支持获取最新的相同 (group-id, artifact-id, version) jar 甚至 SNAPSHOT jar。
解决方案:
每次从 ivy-cache 中删除 sub-app-version.jar。或 每次在 pom.xml 中将子应用 jar 的版本更改为下一个值(应该大于当前值)。
4 Configuration - Reference Documentation
请阅读:
4.7.6 快照和其他变化的依赖关系
【讨论】:
匿名建议编辑 (***.com/review/suggested-edits/2495777) 建议:在 Grails 2.3 及更高版本中解决了这个问题, -- 它提供了仅使用 maven 存储库的选项,因此它不会创建 ivy-cache 文件夹至少。以上是关于如何让 Grails 从 Maven 存储库中获取最新的本地 jars?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Grails 命令/SDK 中清除 Maven 缓存?