我在我的POM中使用gmaven-plugin到set a custom system property。这似乎有效,因为我能够使用maven-antrun-plugin成功回显该属性;但是,maven-deploy-plugin似乎完全没有意识到该属性,无法解决它。
POM的相关部分:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
System.setProperty("nodotsversion", "${env.PATCH_VERSION}".replace('.', ''))
</source>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version><!-- 1.2 in central -->
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<configuration>
<target>
<echo message="${nodotsversion}" />
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.6</version>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
<repositoryId>artifactory</repositoryId>
<packaging>sql</packaging>
<generatePom>true</generatePom>
<url>${project.distributionManagement.snapshotRepository.url}</url>
<groupId>com.company.product</groupId>
<artifactId>patch${nodotsversion}</artifactId>
<version>1.0.0-SNAPSHOT</version>
<file>${WORKSPACE}/myfile.sql</file>
</configuration>
</plugin>
</plugins>
</build>
当我使用mvn clean install deploy:deploy-file
运行时,出现以下错误:
Caused by: org.apache.maven.plugin.MojoExecutionException: The artifact information is incomplete or not valid:
[0] 'artifactId' with value 'patch${nodotsversion}' does not match a valid id pattern.
为什么maven-antrun-plugin能够解析我的自定义系统属性,而maven-deploy-plugin却不能?
答案 0 :(得分:2)
我不确定,但我相信${...}
占位符语法只能解析项目属性。我相信系统属性会在构建中的某个点添加到项目属性中,这就是系统属性以这种方式可用的原因,但是稍后在构建中添加的系统属性将不可用。你应该add the property to the project properties代替。
答案 1 :(得分:0)
我不确定这是如何相关的,但我最近发现了一个使用${...}
语法和gmaven-plugin的问题。在我的插件中,我正在为构建生成finalName。这部分pom看起来像:
<build>
<finalName>${my.final.name}</finalName>
然后,在maven <source>
部分,我有类似的内容:
def myvar = "prefix${someothervar}suffix"
project.properties['my.final.name'] = myvar
pom是为了战争。当我运行maven时,输出总是:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project myservice: The parameters 'warName' for goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war are missing or invalid -> [Help 1]
经过多次努力,我终于找到了解决问题的方法。 myvar
需要声明为字符串!
String myvar = "prefix${someothervar}suffix"
project.properties['my.final.name'] = myvar