我有一个Maven项目“核心”。在项目的pom.xml中,版本为0.1。 我在Jenkins中使用参数化构建并设置文本参数myNewVersion = 3.1。 我还设定了以下maven目标:
versions:set -DnewVersion=${myNewVersion} versions:commit deploy
当构建时,maven将pom.xml中的版本正确更新为“3.1”。但是,maven部署任务将我的项目部署为“core-0.1”,版本仍为0.1。我的Nexus中相应的0.1 dir中包含的pom文件指出版本号为“3.1”。
如何强制maven部署任务使用maven版本插件设置的正确版本?
非常感谢你的帮助。
编辑1: 澄清我的需求:POM中项目的版本不应该说明实际的构建版本。我用它来确定我的“核心”项目与底层系统和API的兼容性。更详细:项目“core”从jenkins获取“interfaceVersion = 3.1”或“interfaceVersion = 4.0”参数。这决定了我的核心项目使用哪个版本来依赖于另一个“库”包。
现在,我有两个Jenkins构建作业,一个用于3.1,一个用于4.0库项目依赖性的核心项目。每个都从SVN检出相同的项目代码,但将不同的版本参数传递给正在构建的“核心”项目。我想在pom.xml中使用这个版本号作为项目的版本号,并将我的jar的版本号用于nexus(即core-3.1.jar或core-4.0.jar)。
编辑2: 我走得更远了。我只是使用我在jenkins中设置的version参数作为参数化构建部分中的参数作为pom文件中项目的版本号。 Maven警告这样做,但它确实有效。但是,依赖于“核心”的所有项目现在都需要指定“$ {myNewVersion}”作为依赖版本。
所以我尝试再次使用versions-maven-plugin来设置/覆盖pom文件中的版本,就像我上面所说的那样。但是,现在使用maven deploy时出现“拒绝访问”错误。如果我删除“版本:set -DnewVersion = $ {myNewVersion}版本:commit”并只使用“deploy”,它就可以了。有任何线索如何解决这个问题?
答案 0 :(得分:0)
在你的pom.xml中将版本设置为变量,如下所示:
<version>${version}</version>
然后运行maven
mvn deploy -Dversion=${myNewVersion}
答案 1 :(得分:0)
对于遇到相同问题的任何人,我遇到了同样的问题,并且它与versions
插件相关并使用了Aggregator POM。版本更改未传播到子项目,而子项目的父项未设置为聚合器pom。
这可以通过versions:set
versions:set -DgroupId=com.company.* -DartifactId=* -DnewVersion=${myNewVersion} versions:commit deploy
的范围来解决,例如:
<!-- identity copy -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<!-- remove id from figure when 1st subfigure does not have id -->
<xsl:template match="figure[descendant::subfigure[not(@id)]]/@id"/>
<!-- insert id from figure into subfigure -->
<xsl:template match="subfigure[not(@id)][ancestor::figure[1]/@id][1]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:copy-of select="ancestor::figure[1]/@id"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<!-- remove id from graphic when superordinate subfigure does not have id -->
<xsl:template match="graphic[ancestor::subfigure[not(@id)]]/@id"/>
<!-- insert id from graphic into subfigure -->
<!-- (set priority="+1" or "-1" to avoid possible conflicts with other template) -->
<xsl:template match="subfigure[not(@id)][descendant::graphic[1]/@id]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:copy-of select="descendant::graphic[1]/@id"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<!-- replace double whitespace in title -->
<xsl:template match="title[contains(., ' ')]/text()">
<xsl:value-of select="replace(., ' ', ' ')"/>
</xsl:template>