0

我正在尝试使用 Grails Maven 插件来构建一个战争文件。该插件存在一个已知问题,即它无法解析范围依赖关系,并且我的项目 pom 文件必须包含范围依赖关系。

依赖项是这样指定的:

<dependency>
  <groupId>mygroup</groupId>
  <artifactId>myartifact</artifactId>
  <version>[0.0.0,999.999.999)</version>
</dependency>

错误信息是这样的:

[错误] 无法在项目 sdm 上执行目标 org.grails:grails-maven-plugin:2.2.1:clean (default-clean):无法为 Grails 执行创建类路径。在解决可执行文件的依赖关系以准备执行时遇到问题。解决项目工件时出错:无法将工件 mygroup.myartifact:pom:[0.0.0,999.999.999) 从/向 myRepo ( https://maven.mydomain/nexus/content/groups/myRepo ) 传输:项目 mygroup.myartifact 的 IllegalArgumentException :pom:[0.0.0,999.999.999): 索引 89 处路径中的非法字符:https://maven.mydomain/nexus/content/groups/myRepo/mygroup/myartifact/[0.0.0,999.999.999)/myartifact-[ 0.0.0,999.999.999).pom -> [帮助 1]

如您所见,范围依赖性没有得到解决,并且正在寻找文字版本“[0.0.0,999.999.999)”。

要解决此问题,我可以使用 Maven 版本插件并执行以下操作:

  1. mvn versions:resolve-ranges [用实际版本替换 pom 文件中的 range deps]
  2. mvn grails:war [根据新修改的 pom 文件中的实际版本构建战争]
  3. mvn 版本:revert [将 pom 文件恢复到原始状态]

但这是我的问题:如果我将这些目标组合到一个 Maven 命令中:

mvn versions:resolve-ranges grails:war versions:revert

grails:war 因我上面描述的错误而失败 - 它似乎看到 pom 文件处于其初始状态(具有范围依赖项),即使版本插件已使用实际版本号更新了 pom 文件。失败后,pom文件有这个:

<dependency>
  <groupId>mygroup</groupId>
  <artifactId>myartifact</artifactId>
  <version>2.1.15</version>
</dependency>

所以我的问题是 - 为什么第二个目标 (grails:war) 会看到 pom 文件,因为它是在整个目标链的开始时,而不是在目标运行时?如何使第二个目标(grails:war)在第一个目标(versions:resolve-ranges)完成后看到pom文件?

4

0 回答 0