从 Maven 发布插件中的另一个配置访问配置值

Posted

技术标签:

【中文标题】从 Maven 发布插件中的另一个配置访问配置值【英文标题】:Accessing configuration value from another configuration in the Maven Release plugin 【发布时间】:2017-05-02 18:52:29 【问题描述】:

在 Maven 中是否可以从另一个配置值访问一个配置值?例如,在发布插件中,可以在配置tagNameFormat 元素期间访问project.version 键。我想做的是在另一个名为completionGoals 的元素中使用tagNameFormat 值。见下文:

    <!-- Snippet from a POM -->
    <build>
        <plugins>
        ...
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.3</version>
                <configuration>
                    <tagNameFormat>$my.pom.property@project.version-$my.pom.property.extra</tagNameFormat>
                    <checkModificationExcludes>
                        <checkModificationExclude>pom.xml</checkModificationExclude>
                    </checkModificationExcludes>
                    <completionGoals>clean verify help:evaluate -Dexpression=$tagNameFormat</completionGoals>
                </configuration>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>prepare</goal>
                            <goal>perform</goal>
                        </goals>
                        <configuration>
                            <pomFileName>$release.pom.pathpom.xml</pomFileName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        ...
        </plugins>
    </build>

值得注意的是,在上面的配置中,我可以看到tagNameFormat 本身填充了标准 POM 版本属性和我自己的自定义属性(顺便说一下,它是在命令行中运行时定义的)。但是,当我尝试访问该值以定义另一个配置元素时,completionGoalscompletionGoals 显示为变量占位符,例如“$tagNameFormat”字面上出现在结果命令中。 (通过使用 -X-e 标志运行 Maven 进行验证。)

问题:

    是否可以从 POM 中的 Maven 插件配置中获取填充的插件配置值? 我是否正确引用了tagNameFormat 配置元素?我怎么能用 Release 插件做到这一点? “@”与“$”是什么意思? (猜想:动态评估还是静态评估?)

【问题讨论】:

你能解释一下你想要达到的目标吗? 我正在尝试从发布插件的 completionGoals 部分执行另一个 maven 命令。我想向它提供有关发布标签的信息。 【参考方案1】:

我知道的唯一方法是定义另一个POM property:

<property>
  <my.pom.property>...</my.pom.property>
  <my.pom.property.extra>...</my.pom.property.extra>
  ...
  <myTagNameFormat>$my.pom.property@project.version-$my.pom.property.extra</myTagNameFormat>
</property>

并相应地使用它:

     <tagNameFormat>$myTagNameFormat</tagNameFormat>
     ...
     <completionGoals>clean verify help:evaluate -Dexpression=$myTagNameFormat</completionGoals>

Re 3.:AFAIK,变量分隔符 $...@...@ 是等效的,我从未读过或听到相反的情况。但是,老实说,我从来没有使用过@...@,因为我习惯了来自 Bash 的$...,这也是Filter 文档页面上唯一提到的一个。 (@...@ 只在Escape filtering 有提及,我什至不知道它存在了很长时间。)

【讨论】:

以上是关于从 Maven 发布插件中的另一个配置访问配置值的主要内容,如果未能解决你的问题,请参考以下文章

Maven Exec Plugin:如何配置工作目录

Maven 插件可以自动从“执行”部分查看“配置”标签吗?

使用Maven程序集插件创建WAR文件

是否可以从 p2 repo 解决 maven 插件中的依赖关系

Maven tomcat和jetty的配置插件

如何配置插件以将除 priv/static/ 之外的另一个目录设置为公共目录?