从插件设置 Maven 属性

Posted

技术标签:

【中文标题】从插件设置 Maven 属性【英文标题】:Set maven property from plugin 【发布时间】:2011-11-25 02:16:51 【问题描述】:

我在这里阅读了一些关于如何从 maven 插件设置属性的问题(其中大多数都谈到了应用程序的版本号)。 似乎没有简单的方法可以做到这一点,我发现最好的解决方案是有一个 filter.properties 文件,该文件从插件更新并由主 pom 文件用于过滤所需的资源。

从 Maven 文档 (Maven filter plugin) 中阅读此内容后,我尝试了另一种解决方案:

变量可以包含在您的资源中。这些变量,表示 由 $... 分隔符,可以来自系统属性,您的 项目属性,来自您的过滤器资源和命令 行。

我发现可以从系统属性中读取变量很有趣。所以,我修改了我的插件来设置这样的系统属性:

System.setProperty("currentVersion", appCurrentVersion);

但是,过滤后的资源似乎不会读取此值。 谁能告诉我这种方法有什么问题?

更新:我在 validate 阶段运行我的插件。

非常感谢。

【问题讨论】:

【参考方案1】:

Maven 在initialize phase 中设置属性。我假设在那个阶段 Maven 加载系统属性。之后,maven 不再加载系统属性。如果您尝试在此阶段之后添加系统属性,则不会加载它。

尝试在validate phase 中运行您的插件。

【讨论】:

我已经在验证阶段运行插件。对不起,我之前没有提到。【参考方案2】:

不要设置为系统属性,设置为Maven项目属性

// inject the project
@Parameter(defaultValue = "$project")
private org.apache.maven.project.MavenProject project;

// and in execute(), use it:
project.getProperties().setProperty("currentVersion", appCurrentVersion);

见:

Mojo Developer Cookbook MavenProject javadoc

建议使用Properties.put() 而不是Properties.setProperty() 进行编辑。虽然从技术上讲,Properties 实现了Map,但明确不鼓励这种用法in the Properties javadoc。

【讨论】:

以上是关于从插件设置 Maven 属性的主要内容,如果未能解决你的问题,请参考以下文章

从 Maven POM 文件中读取属性文件

Spring Boot Maven 插件 - “附加”设置有啥作用?

有没有办法从 text.file 读取文本并将其设置为 pom.xml maven 中的 maven 属性?

将 a 属性设置为没有 Ant 的 maven.compile.classpath 包含的内容

将文件读入 Maven 属性

为啥 Maven 版本插件不更新本地定义的属性?