gpt4 book ai didi

java - 编辑: How do I set variables in a Project pom from a Maven Plugin?

转载 作者:太空宇宙 更新时间:2023-11-04 15:09:01 25 4
gpt4 key购买 nike

编辑

我能够创建一个 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();
}
}

现在我的问题是:

如何设置变量${last-rev}${last-changed}在项目pom中?我尝试过以下方法:

@Parameter(property = "last-rev")
private Long svnLastRevision;

@Parameter(property = "last-changed")
private Date svnLastChangedDate;

但这不起作用,我的测试 pom 仍然显示 ${last-rev}。

<小时/>

我正在使用 Maven 和 Jenkins 来构建该项目。我已经能够使用 <properties> 包含 pom 文件中的属性和<filtering>true</filtering> :

应用程序属性

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) .

这是我迄今为止尝试过的:

  1. 在 Jenkins 预构建作业期间调用 shell 脚本。

    虽然这有效(使用 svn infosed 命令),但它依赖于平台,这并不理想。

  2. 使用Build Number Maven Plugin .

    我的问题是它给了我 SVN 修订版号,而不是最后更改的修订版

    另外,如果我尝试将修订版格式化为我想要的格式(使用 <format> 配置选项),它会将 ${buildNumber} 更改为内部版本并使用构建日期(例如: Rev. 1 of 2014-02-04 15:03:57 -0800 (Tue, 04 Fev 2014) )。

  3. 使用 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;但这没有用。

关于如何将上次更改版本和上次更改日期添加到我的属性文件中,有什么想法吗?

最佳答案

  1. 在 Jenkins 预构建作业期间调用 shell 脚本。

    Although this works (using svn info and sed commands), it's platform dependent, which is not ideal.

    此外,如果您使用svn info,您将获得 SVN 修订号,而不是最后更改的版本。除此之外,还有更好的工具获取此类信息svnversion

  2. 使用内部版本号 Maven 插件。

    My problem is that it gives me the SVN Revision number, not the Last Changed Rev.

    这给我的印象是你不明白SVN之间的区别修订版号和最后更改的修订版。如果你喜欢拥有lastchangerev你必须说出哪个文件?通常你喜欢拥有您的主干的最后更改版本,这正是maven 插件将提供内部版本号(以及 svn 信息或 svnversion)。

  3. 使用 SVNKit 创建我自己的 Maven 插件。

    您将按照 build-number-maven-plugin 的工作方式进行操作。

您可以使用 buildnumber-maven-plugin 的以下配置来获取您应该使用的 svn 修订版:

  <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<configuration>
<revisionOnScmFailure>UNKNOWN</revisionOnScmFailure>
<getRevisionOnlyOnce>true</getRevisionOnlyOnce>
</configuration>
<executions>
<execution>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>

通过使用上述配置,您可以使用包含 SVN 修订号的 ${buildNumber}

关于java - 编辑: How do I set variables in a Project pom from a Maven Plugin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21575612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com