当前位置: 首页 > 知识库问答 >
问题:

Maven3:访问“根”公司POM版本

司马辉
2023-03-14
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
  <execution>
    <id>echo-build-environment</id>
    <phase>validate</phase>
    <goals><goal>run</goal></goals>
    <configuration>
      <target>
        <echo level="info" message="Maven ${maven.version}" taskname="Version" />
        <echo level="info" message="Corporate POMs ${want.the.version.here}" taskname="Version" />
      ....
     </target>
corporate-parent
  team-parent
    application-parent
      child-module
corporate-parent
  a-simple-library

我无法回显${project.version},因为它将是当前(子)项目的版本。我不能使用${project.parent.version},因为我不知道可能有多少级继承。我尝试定义一个 属性,硬编码到公司POM版本,但是当我发布公司POM时,发布插件不知道更新该属性(这是有道理的,它不是依赖版本,只是一个属性,发布版本不能知道更新它)。

理想情况下,我希望能够通过一个属性直接获取特定POM的版本,比如${some.groupid.compore-parent.version}。这样的东西存在吗?

如果没有,在发布期间是否有一种方法可以用正在发布的项目的releaseversion更新POM属性?

我希望我不必写一个自定义插件来做一些乍一看似乎并不困难的事情。

共有1个答案

田兴旺
2023-03-14

我停止使用maven-antrun-plugin,转而使用GMaven。我可以通过简单的POM层次结构遍历获得所需的信息。

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>groovy-maven-plugin</artifactId>
    <version>2.0</version>
    <executions>
        <execution>
            <id>echo-build-environment</id>
            <phase>validate</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <source>
                <![CDATA[
                def rootPom = project;
                while (rootPom.parent != null) {
                    rootPom = rootPom.parent;
                }

                project.properties.setProperty('root.pom.version', 
                                                rootPom.version);                            
                log.info("      Maven Home:  " + project.properties['maven.home']);
                log.info("       Java Home:  " + project.properties['java.home']);
                log.info("   Built By User:  " + project.properties['user.name']);
                log.info("Corp POM Version:  " + rootPom.version);
                ]]>
                </source>
            </configuration>
        </execution>
    </executions>
</plugin>

project.properties.setProperty部分存储计算的属性,以便子POM可以访问它。

结果日志如下所示:

[INFO]       Maven Home:  c:\dev\maven\apache-maven-3.0.4
[INFO]        Java Home:  c:\Program Files\Java\jdk1.7.0_13\jre
[INFO]    Built By User:  user944849
[INFO] Corp POM Version:  0.26-SNAPSHOT
 类似资料:
  • 本文向大家介绍比较公司和公司。,包括了比较公司和公司。的使用技巧和注意事项,需要的朋友参考一下 公司与公司之间的主要区别如下- 公司 成立公司 这是经营业务的实体。 注册为公司的第一步。 它被称为CORP。 它被称为INC。 第二阶段的业务。 进行公司注册手续。 持有个人资产负债。 有限责任。 成立过程的结果。 应遵循法律程序。 不要为公司筹集资金。 充当集资渠道。 与日常业务活动有关。 维护所有

  • 我正在尝试从我的本地主机(在 Windows 上)测试我们的曼德里尔 API。似乎我需要配置“本地颁发者证书”。因此,我下载了 http://curl.haxx.se/ca/cacert.pem 并将其保存在我的文档根目录(c:\wamp\www)中。然后,在我的 php.ini 文件中,我配置了这个: 。 当我运行 Mandrill 的示例代码时,我收到以下错误: 出现mandrill错误:Ma

  • 我无法从我的django站点连接到我的postgres数据库。在开始之前,我已经阅读并尝试了以下每个站点提供的说明: 詹戈设置:通灵镜2。操作错误: FATAL: 对等身份验证失败的用户 “独立” 操作错误: (心理医生 2.操作错误) FATAL: 用户的密码身份验证失败 致命:用户“根”后gresql的密码身份验证失败 postgresql: FATAL: 用户“道格拉斯”的密码身份验证失败

  • 当我使用mvn install构建工件时,我看到JAR在我的.m2文件夹中构建,但是Project.version没有替换为实际版本,即1.0-Snapshot。 > 每个工件的.m2存储库中的父pom和/或子pom是否具有指定的版本,或者是否为Project.version 我是否应该在父POM中指定Project.Version作为属性。maven文档说明Project.version可由De

  • 当我试图构建站点时,我目前在Maven3中面临以下问题。我会感谢你在这方面的帮助。 mvn清洗站点 首先是配置: 下面是我运行“MVN清洁站点”的文件夹的结构: 在执行之前,通过以下命令成功地将parent-pom部署到NEXUS存储库中 最后是问题本身: 谢谢你。

  • 诸葛io, 专注于用户行为数据采集与分析,聚焦用户全生命周期帮助企业挖掘用户增长契机。提供私有化部署和 SaaS 两种服务模式、实现数据采集与分析,通过以为用户中心理念与实践,为企业提供人人可用的分析工具,提升数据分析与应用效率。 发展历程 2014 诸葛io开始研发 2015 诸葛1.0 SaaS工具上线 引领新一代数据分析产品 2016 推出私有化PaaS平台 斩获6项国内外大奖 2017 通