如何让 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 缓存?

如何从 Maven 存储库中找到最新版本的工件

如何使用视图模型从存储库中获取数据

如何从 Maven 存储库中清除旧的依赖项?

如何强制 IntelliJ 中的 Maven 从本地 .m2 存储库中提取特定依赖项

如何从maven存储库中清除旧的依赖项?