我正在尝试使用 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 版本插件并执行以下操作:
- mvn versions:resolve-ranges [用实际版本替换 pom 文件中的 range deps]
- mvn grails:war [根据新修改的 pom 文件中的实际版本构建战争]
- 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文件?