5
  1. 在我的 Maven 存储库 (.m2) 中。有一个我的本地 jar,比如 sub_app-0.1.jar。
  2. 我在常春藤缓存中有相同的副本。
  3. maven install在 sub_app 上运行,然后创建了新的 sub_app-0.1.jar 文件。
  4. 之后,我运行grails clean它并没有从 .m2 获取我的新 sub_app-0.1.jar。
  5. 但是,如果我从常春藤缓存中删除(删除)sub_app-0.1.jar 文件并运行它,grails clean那么它将新的 sub_app-0.1.jar 文件放入常春藤缓存中。

  6. 如果我在子应用程序 pom 和 grails pom 中更改版本,那么 Grails 将采用最新版本。再次安装它不采取。

  7. 我什至尝试将 SNAPSHOT 添加到 sup-app jar 中。同样的结果,第一次服用,后来没有。

IE。Grails 只考虑常春藤缓存中的 jar 名称和版本,如果有的话 - 它不需要。如果没有 - 它取自.m2。

但它不考虑新/旧版本。

我怎样才能在第 4 步中获得相同的行为(第 5 步)?

4

3 回答 3

0

Grails 不支持获取最新的相同 (group-id, artifact-id, version) jar 甚至 SNAPSHOT jar。

解决方案:

  1. 每次,从 ivy-cache 中删除 sub-app-version.jar。或者
  2. 每次,将版本更改为 pom.xml 中子应用 jar 的下一个值(应大于当前值)。

4 配置 - 参考文档

请阅读:

4.7.6 快照和其他变化的依赖

于 2013-05-15T15:28:55.483 回答
0

更新

您可以尝试在BuildConfig.groovy中将更改=true添加到您的依赖 项中,如Grails 指南中所述

compile ('YOUR_GROUP_ID:YOUR_SUB_AP:0.1') {
    changing = true
}
于 2013-05-13T11:56:38.647 回答
0

不确定这是否与您的问题相同,但我使用 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 的错误/功能,我已经向他的知识低头并通过以下方式解决了这个问题:

  1. maven 包而不是安装在“接口”上,然后将最新的 jar 复制到常春藤缓存。看来 STS 会让我替换 jar 的内容。然后 grails clean 使用来自 ivy-cache 的最新 jar(不尝试从 maven 下载)。
  2. maven 安装在“接口”上,关闭 STS,从 ivy-cache 中删除 jar,重新打开 STS,grails clean 从 maven 下载最新的 jar。

这两种解决方法都很痛苦,所以如果有人有任何想法,我会很感兴趣?

于 2013-05-14T08:53:51.030 回答