我正在使用Maven版本插件的preparationGoals
配置选项来转换其他文件以反映正在发布的项目的版本。这很好用。
问题在于,在执行提交时,插件显式指定只应包含pom.xml
个文件,从而使我的其他文件不公开:
[INFO] Executing: /bin/sh -c cd /Users/jw/dev/Test && git commit --verbose -F /var/folders/w0/hr1h_7h50f3_pwd_nrk9l808000195/T/maven-scm-114713951.commit pom.xml library/pom.xml sample/pom.xml
我有什么方法可以覆盖此行为并指定要包含在提交中的其他文件或小数据?
(我也需要completionGoals
的这种行为,我已经配置了这种行为进行同样的转换)
答案 0 :(得分:4)
你能使用maven-scm-plugin吗?添加运行scm:checkin
目标的插件执行以提交所需的文件。将其绑定到将在preparationGoals
运行时执行的阶段(如果您指定了一个或多个阶段作为该元素的值),或直接在scm:checkin
中包含preparationGoals
目标。 / p>
答案 1 :(得分:2)
我还需要提交一些额外的文件(由Maven Replacer插件更改)。我是通过以下方式做到的:
首先我配置了Maven Release plugin来执行其他目标:
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<preparationGoals>-Prelease -DreplacerVersion="${releaseVersion}" clean replacer:replace scm:checkin verify</preparationGoals>
<completionGoals>-Prelease -DreplacerVersion="${developmentVersion}" clean replacer:replace scm:checkin verify</completionGoals>
</configuration>
</plugin>
release
个人资料定义了Maven SCM插件的配置replacerVersion
参数在某些文件中设置正确的版本clean
是Maven Release插件运行的标准目标(默认值:clean verify
)replacer:replace
目标负责修改文件scm:checkin
确实提交并推送verify
是Maven Release插件运行的标准目标(默认值:clean verify
)接下来我配置了Maven Replacer plugin:
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.3</version>
<configuration>
<includes>
<include>${basedir}/file1.txt</include>
<include>${basedir}/file2.txt</include>
</includes>
<replacements>
<replacement>
<token><![CDATA[<pattern>.*</pattern>]]></token>
<value><![CDATA[<pattern>${replacerVersion}</pattern>]]></value>
</replacement>
</replacements>
</configuration>
</plugin>
${replacerVersion}
允许使用相同的配置从开发版更改为发行版,然后从发行版更改为下一个开发版本。
最后我定义了我想要使用的Maven SCM plugin版本:
<plugin>
<artifactId>maven-scm-plugin</artifactId>
<version>1.9.5</version>
</plugin>
并在release
配置文件中对其进行配置(我在配置文件中定义它以防止在非发布版本期间意外提交):
<profile>
<id>release</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-scm-plugin</artifactId>
<configuration>
<message>[maven-scm-plugin] set ${replacerVersion} version in files</message>
<includes>file1.txt, file2.txt</includes>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
执行命令后感谢:
mvn release:prepare -DdevelopmentVersion=1.2.1-SNAPSHOT -DreleaseVersion=1.2.0 -Dtag=1.2.0
我看到4次提交:
答案 2 :(得分:0)
似乎未能允许指定其他标记文件实际上是Maven中的一个错误。在Maven Release Plugin的org.apache.maven.shared.release.phase.AbstractScmCommitPhase类的第130行,引用了Maven 2.0-beta-7中首次引入的“commitByProject”标志。
分支用于确定将文件添加到Maven版本的机制:prepare commit。 SCM插件在使用SCMFileSet class提交之前加载了文件。该类的一个分支实例可能一直在尝试添加基本目录中的所有文件,但它在SCM中不起作用。
这是一个可以实现修复以获取文件列表或添加要提交的文件目录的点。
最重要的是,在深入研究Maven Release Plugin的调试执行之后,它正在调用SCM插件来仅添加来自repos的POM。更改记录不良的“commitByProject”标志对于将哪些文件添加到SCM提交中的结果没有任何影响。