【发布时间】:2014-02-05 11:12:06
【问题描述】:
编辑
我能够创建一个 maven 插件,从存储库获取 url 信息并从 svn 获取信息:
@Mojo(name = "svn-info", defaultPhase = LifecyclePhase.PROCESS_SOURCES)
@Execute(phase = LifecyclePhase.PROCESS_SOURCES)
public class SvnInfoMojo extends AbstractMojo {
@Parameter(property="project.scm.url", defaultValue = "${project.scm.url}", required = true)
private String url;
private SVNInfo info;
private Long svnLastRevision;
private Date svnLastChangedDate;
public void execute() throws MojoExecutionException, MojoFailureException {
// the controller uses SVNKit to fetch the info
SVNController controller = new SVNController(url);
info = controller.getInfo();
this.svnLastRevision = info.getCommittedRevision().getNumber();
this.svnLastChangedDate = info.getCommittedDate();
}
}
现在我的问题是:
如何在项目pom中设置变量${last-rev}和${last-changed}?我尝试了以下方法:
@Parameter(property = "last-rev")
private Long svnLastRevision;
@Parameter(property = "last-changed")
private Date svnLastChangedDate;
但这不起作用,我的测试 pom 仍然显示 ${last-rev}。
我正在使用 Maven 和 Jenkins 来构建项目。我已经能够使用<properties> 和<filtering>true</filtering> 包含来自pom 文件的属性:
application.properties
application.revision=${project.version} #uses maven's version tag.
application.revision=Rev. ${last-rev} of ${last-changed}
application.build.type=${project.buildType} #depends on the maven profile
我现在正尝试以以下格式将 SVN 修订信息插入属性文件:
application.revision=Rev. ${last-rev} of ${last-changed}
例如,这会给我Rev. 11981 of 2014-02-03 11:01:20 -0200 (Mon, 03 Fev 2014)。
这是我迄今为止尝试过的:
-
在 Jenkins 预构建作业期间调用 shell 脚本。
虽然这可行(使用
svn info和sed命令),但它依赖于平台,这并不理想。 -
我的问题是它给了我 SVN Revision 编号,而不是 Last Changed Rev。
另外,如果我尝试将修订版格式化为我想要的格式(使用
<format>配置选项),它会将 ${buildNumber} 更改为内部版本并使用构建日期(例如:Rev. 1 of 2014-02-04 15:03:57 -0800 (Tue, 04 Fev 2014)) . -
使用 SVNKit 创建我自己的 Maven 插件。
为了做到这一点,我需要:
- 从项目pom中获取scm连接;
- 根据收到的 scm url 创建一个 SVNUrl;
- 使用 SVNWCClient.doInfo(url, SvnRevision.HEAD);
- 创建项目 pom 文件可用的变量(例如 ${last-rev} 和 ${last-changed}
在后一种情况下,我是 maven 插件 API 的新手。我真的不知道如何获取 Scm 组件或创建项目 pom 可用的变量。我试过使用@Component private Scm scm;,但没有用。
关于如何将 Last Changed Rev. 和 Last Changed Date 添加到我的属性文件中的任何想法?
【问题讨论】:
标签: java maven svn jenkins maven-plugin