我正在开发一个自定义的maven插件。当我写:
${project.version}
在我的pom文件中,我可以获得它的值,但是如果我在属性文件中写入,有没有办法:
project.version = ${project.version}
这将正确设置project.version值,我如何在Java代码中实现它?
PS:我不在Mojo中使用注释,也不想在Java代码中使用变量,因为用户应该像在属性文件中那样定义我的变量,我不能为了改变事情而改变我的核心Java代码。
您可以使用Maven资源筛选,只需在<build>
中添加<resources>
,然后打开对任何您想要的内容的筛选。
如果使用注释,请参阅http://maven.apache.org/plugin-tools/maven-plugin-plugin/examples/using-annotations.html使用
@Component
protected MavenProject project;
带有doclet
/**
* The Maven project to act upon.
*
* @parameter expression="${project}"
* @required
*/
private MavenProject project;
然后project.getVersion()
您可以读取并保存pom.xml
中的任何属性,就像我在以下函数中所做的那样:
/**
* Save a property in a pom.xml
*
* @param propertyName Name of the property
* @param value New value for the property
*/
public static void saveProjectProperty(String propertyName, String value)
{
Model model = null;
FileReader reader = null;
MavenXpp3Reader mavenreader = new MavenXpp3Reader();
try
{
reader = new FileReader("pom.xml");
model = mavenreader.read(reader);
MavenProject project = new MavenProject(model);
while (project.getParent() != null)
{
project = project.getParent();
}
project.getProperties().put(propertyName, value);
try (FileWriter fileWriter = new FileWriter("pom.xml"))
{
project.writeModel(fileWriter);
}
}
catch (IOException ex)
{
LOG.severe("Error saving pom.xml");
}
catch (XmlPullParserException ex)
{
LOG.warning("Error reading pom.xml");
}
}
为了能够在JVM中使用非本机的类,您应该添加以下依赖项:
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.0</version>
</dependency