我正在处理一个与这里描述的项目类似的项目。因此,它在父pom.xml中有几个模块:
<modules>
<module>../de.vogella.tycho.plugin</module>
<module>../de.vogella.tycho.feature</module>
<module>../de.vogella.tycho.p2updatesite</module>
</modules>
这些模块具有通用版本号,例如1.0.0-SNAPSHOT
或不具有-SNAPSHOT
。feature.xml文件需要包含相同的版本号:
<feature
id="com.my.feature"
label="My plugin feature"
version="1.0.0">
和:
<plugin
id="com.my.plugin"
download-size="0"
install-size="0"
version="1.0.0"
unpack="false"/>
文件category.xml(在p2更新站点项目中)和MANIFEST.MF(在插件项目中)需要包含相同的值。
问题是:如何使用Maven自动化所有这些文件中的版本号更新过程?
我尝试使用maven发布插件和maven版本插件来解决这个问题。第一个插件做了很多未使用的操作(比如做了很多CVS提交,我在这个项目中没有使用)。第二个插件只对pom.xml文件进行了更改,没有修改feature.xml、category.xml和MANIFEST.MF,或者我用得不太好。
有一个专门的tycho版本插件可以解决这个问题。它(有意地)做了与maven版本插件相同的事情,但也更新了feature.xml和MANIFEST.MF.中的(冗余)版本
更重要的是,插件还会更新指定确切版本的引用,比如对feature.xml中插件的引用,或者对category.xml中功能的引用。因此,最终,所有出现的工件版本都会更新,就像在重构中一样。
对于具有精确版本的参考,在Tycho的正常构建过程中也会自动更新。因此,如果例如您的功能引用了版本1.0.0.qualifier
中的插件,则此版本字符串将使用限定符的实际值更新,例如1.0.0.201207171147
。您可以利用此功能最大限度地减少tycho版本插件需要更新的位置数量:您可以使用魔术版本0.0.0
,而不是在引用中指定当前版本的文字。作为正常构建的一部分,此版本也会自动更新为最新版本。
我想为Tobias Oberlies的答案添加一些实用的提示,供像我这样经验不足的专业用户使用:
目标tycho-versions:set-version
将更改从主pom引用的所有项目的版本。maven配置文件(pom.xml)的版本字符串以及相应的Eclipse/OOSGi工件(MANIFEST.MF、feature.xml、category.xml)将不断更改。
要从命令行运行目标,请使用以下命令:
mvn org.eclipse.tycho:tycho-versions-plugin:set-version -DnewVersion=1.2.0-SNAPSHOT
newVersion
用户属性(本例中为1.2.0-SNAPSHOT
)是要设置的新版本。
上述命令行将使用最新版本的tycho-versions-plugin
。如果应该使用某个版本的插件,则需要将tycho-version-plugin
添加到主pom的project/build/plugins
元素中。
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-versions-plugin</artifactId>
<version>${tycho-version}</version>
</plugin>
将${tycho-version}
替换为当前版本的Tycho,或者使用该名称和适当的值定义一个属性。