使用revision属性构建一个模块的Maven问题

时间:2016-12-11 13:07:45

标签: java maven jenkins multi-module

最近,我们尝试使用jenkins部署文件,为构建提供${revision}属性(Maven 3.3.9)。 它在json为开发版本创建0.0.1-SNAPSHOT和为版本创建0.0.1-RC时工作正常,但我们在开发人员机器上使用maven时遇到了问题。 我们有多模块maven项目,其版本在父级中定义,而某些模块使用其他模式作为依赖项。它们都是从jenkins构建它并在本地使用maven,与IDE集成并在将其推入存储库之前运行测试。 当我们尝试构建单个模块时,maven无法识别${revision},尽管在我们提及所有模块时它工作正常,例如mvn clean install -pl appserver,我们看到了

Failed to execute goal on project appserver: Could not resolve dependencies for project com.org:appserver:war:0.0.1-local: Failed to collect dependencies at com.org:my-kinesis-events:jar:0.0.1-local: Failed to read artifact descriptor for com.org:my-kinesis-events:jar:0.0.1-local: Could not transfer artifact com.org:my-parent:pom:${revision} from/to central: Failed to transfer .../repository/maven-central/com/org/my-parent/${revision}/my-parent-${revision}.pom. Error code 500, Server Error -> [Help 1]

我们尝试使用:

  • -Drevision=0.0.1-local

  • <profile> <id>default-version</id> <activation> <property> <name>!revision</name> </property> <activeByDefault>true</activeByDefault> </activation> <properties> <revision>0.0.1-local</revision> <project.version>0.0.1-local</project.version> </properties> </profile>

但唯一有效的是构建父模块,构建模块及其依赖的所有模块:

mvn clean install -pl appserver,my-kinesis-events,module1,module2,...

虽然上述工作需要团队在每次需要时在IDE中定义自定义运行配置。

有人也遇到过这个问题并找到了解决方案吗?

父pom片段:     <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.org</groupId> <artifactId>my-parent</artifactId> <version>${revision}</version> <packaging>pom</packaging> <name>My Parent module</name>
<modules> <module>../my-tools</module> <module>my-kinesis-events</module> .... </modules> ..... </project> <dependencyManagement> <dependencies> <dependency> <groupId>my.org</groupId> <artifactId>my-kinesis-events<</artifactId> <version>${project.version}</version> <dependency> <dependencies> </dependencyManagement>

模块pom片段: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>appServer</artifactId> <parent> <groupId>com.org</groupId> <artifactId>my-dsp</artifactId> <version>${revision}</version> <relativePath>..</relativePath> </parent> <packaging>war</packaging> <name>AppServerAPI</name> <description>Application Server</description> <dependencies> <dependency> <groupId>com.org</groupId> <artifactId>my-openrtb</artifactId> </dependency> ..... </dependencies> .... </project>

1 个答案:

答案 0 :(得分:1)

这些问题自Maven 3.5起已得到修复,但是您需要使用maven flatten插件来确保在发布之前从POM中删除所有变量。否则,您最终将拥有包含$ {revision}版本的POM。

下面的blog post中对此进行了详细说明。