将价值从 Mojo 传递到 pom

Posted

技术标签:

【中文标题】将价值从 Mojo 传递到 pom【英文标题】:Passing value from Mojo to pom 【发布时间】:2020-02-07 10:07:52 【问题描述】:

我正在开发一个 maven 插件,我有一个名为“FinalVersion”的参数,它在 Mojo 中创建为 @Parameter,并且它的值在 Mojo 类中设置。 我需要将“最终版本”传递给我的 pom 文件并将其用作其他插件配置中的元素。像这样:

@Mojo(name = "validate", defaultPhase = LifecyclePhase.COMPILE)
public class VersionValidatorMojo extends AbstractMojo
    .
    .

    @Parameter(property = "finalVersion")
    private String finalVersion ;

我想在我的 pom.xml 中有这样的东西

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>custom-maven-release-plugin</artifactId>
                <configuration>
                    <goals>release</goals>
                    <version>finalversion</version>
                </configuration>
            </plugin>

另外,在我的场景中,我有开发人员设置的项目版本,而不是从 SCM 获取,我可以使用哪个插件?

最佳

【问题讨论】:

在另一个插件中使用一个插件的配置通常是个坏主意...这会将插件耦合在一起...问题是:您要解决什么样的问题?我也想看看maven.apache.org/maven-ci-friendly.html 感谢@khmarbaise,我有一个项目设置,我没有从 CI 获取版本。事实上,我手动给出了版本,然后它被计算并作为最终版本输出,应该在再次pom。 【参考方案1】:

你的 POM 应该使用 finalVersion 标签

            <configuration>
                <finalversion>X.Y</finalversion>
            </configuration>

这是另一个完整的示例,带有一个名为位置的参数

        <plugin>
            <groupId>mygroup</groupId>
            <artifactId>myapp</artifactId>
            <version>$project.version</version>
            <configuration>
                <locations>
                    <param>$basedir/src/main/resources/db/toBeIncluded</param>
                    <param>$basedir/src/main/resources/db/migration/upgrade</param>
                </locations>
            </configuration>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>validate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

在我的 Mojo 实现中,我已经定义了

    @Parameter
    private String[] locations;

【讨论】:

谢谢,但我不需要更改我的 pom 中的“最终版本”,我只需要将它用作另一个插件的输入。事实上,我只在我的 mojo 中设置了最终版本,它是只读的。有什么建议吗? 这就是我的建议,我根据您的代码提供了一个示例。在我的项目中,例如 mygroupmyapp$project.version $basedir/src/main/resources/path 其中位置是我的 Mojo impl 中的 @Parameter 现在假设您必须在 pom.xml 的一部分中使用“位置”参数,我们该怎么做? 我已经详细说明了答案,希望我们越来越接近

以上是关于将价值从 Mojo 传递到 pom的主要内容,如果未能解决你的问题,请参考以下文章

从一个属性中提取价值到另一个属性中

Javascript:通过将路径作为字符串传递给对象来从对象中获取深层价值[重复]

Javascript:通过将路径作为字符串传递给对象来从对象中获取深层价值[重复]

Java Maven MOJO - 从项目 POM 中获取信息

如何以编程方式从 pom.xml 执行特定的插件/Mojo?

区块链:从信息互联网到价值互联网