为 Grails 2.5.6 应用程序建立 maven 缓存路径的副作用

Side effects of establishing maven cache path for Grails 2.5.6 applications

为 Grails 2.5.6 应用程序建立一个 maven 缓存路径有很多副作用,我不知道这是一个我找不到报告的已知错误,还是我做错了。

我们的 Grails 应用程序(主要是 2.0.4 版本)在 buildConfig.groovy 中有一个 grails.war.resources 闭包,可以防止某些静态资源到达 war。然而,对于 Grails 2.5.6 应用程序,在我们创建一个空的 ${HOME}/.grails/settings.groovy [=12= 之前,这个闭包不起作用]

是的,空的(惊喜 1)。这种情况在使用 Eclipse Neon 的 Windows 7 和使用 Jenkins 构建应用程序的 Red Hat Linux 中都发生过。

一旦我们有了这个 settings.groovy 文件,我们决定用它来建立 Maven 缓存路径,这样 Grails 和 Java 应用程序就可以共享同一个缓存。该文件包含一行:

grails.dependency.cache.dir="D:/DEV-WAS8/CONF/m2/repository"

使用这一行,构建 Grails 2.0.4 应用程序生成 wars 充满垃圾,因为 grails.war.resources 闭包不起作用(惊喜 2)。这毫无意义,但至少 Grails 2.5.6 是正确构建的。所以我们尝试只为2.5.6的应用建立缓存路径。 settings.groovy 是以下一个:

if (System.getProperty("grails.version")=="2.5.6") {
   grails.dependency.cache.dir="D:/DEV-WAS8/CONF/m2/repository"
}

在这种情况下 grails.war.resources 闭包对正确构建的 2.5.6 和 2.0.4 不起作用(惊喜 3).

grails.dependency.cache.dir 作为一个系统 属性,我们在操作系统级别建立它,以便 settings.groovy 文件仍然是空的。 2.5.6 和 2.0.4 都正确生成了 Wars,但在 Windows 7 中使用 Eclipse Neon 时未正确建立 Maven 缓存路径。但是,它在 Linux 和 Jenkins 中完美运行(Surprise 4)。

我们是如何解决的

为了解决现在的情况,我们使用一个空的 settings.groovy 文件,2.5.6 应用程序在 buildConfig.groovy

中建立 maven 缓存路径

问题是 buildConfig.groovy 文件中的 grails.war.resources 闭包错误地嵌套在 grails.project.dependency.resolution关闭。这虽然不正确,但似乎适用于其他 Grails 版本,例如 1.3.7 和 2.0.4。但是,在嵌套时,闭包在 2.5.6 版中不再可用。一旦取消嵌套,它就会工作并且 war 资源按预期过滤