最近我们尝试使用jenkins提供 $ {restision}
属性的jenkins(maven 3.3.9)。它可以在JSON创建用于Dev Builds的0.0.1-SNAPSHOT
和用于发行版的0.0.1-RC
上工作,但是我们在开发人员机器上使用Maven遇到了问题。我们有多模块的Maven项目,其中包含父母定义的版本,一些模块将其他模块用作依赖项。两者都将其从Jenkins构建,并在本地使用Maven,与IDE集成并运行测试,然后将其推入存储库。当我们尝试构建一个模块时,Maven无法识别${revision}
,尽管当我们提到所有模块时,它可以正常工作,例如mvn clean install -pl appserver
,我们看到
未能在项目应用程序上执行目标:无法解决project com.org:appserver:war:0.0.1-local:无法在com.org:my-kinesis-events:jar:0.0收集依赖项。1-local:未能读取com.org的伪影描述符:我的kinesis-events:jar:0.0.1-local:无法将artifact com.org:my-parent:pom:qum:qum:qum:grevision}从中央:无法转移.../repository/maven-central/com/org/my-parent/$ {revision}/my-parent-$ {revision} .pom。错误代码500,服务器错误 - >[帮助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>
这些问题已解决以来,自Maven 3.5以来,您需要使用Maven Flatten插件来确保在发布前从POM中删除所有变量。否则,您最终将pom包含$ {修订}具有版本。
这在官方Maven文档中很好地解释了:
https://maven.apache.org/maven-ci-frynedly.html#install-deploy