Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从属性文件访问Maven Pom变量_Java_Maven_Pom.xml_Maven Plugin Development - Fatal编程技术网

Java 从属性文件访问Maven Pom变量

Java 从属性文件访问Maven Pom变量,java,maven,pom.xml,maven-plugin-development,Java,Maven,Pom.xml,Maven Plugin Development,我正在开发一个定制的maven插件。当我写作时: ${project.version} 在我的pom文件中,我可以得到它的值,但是如果我写入属性文件,有没有办法: project.version = ${project.version} 这将正确设置project.version值,如何在Java代码中实现它 PS:我不在Mojo中使用注释,我也不想在Java代码中使用变量,因为用户应该在属性文件中定义为我的变量,我不能更改核心Java代码来更改内容。如果使用注释,请参阅 使用 用docle

我正在开发一个定制的maven插件。当我写作时:

${project.version}
在我的pom文件中,我可以得到它的值,但是如果我写入属性文件,有没有办法:

project.version = ${project.version}
这将正确设置project.version值,如何在Java代码中实现它


PS:我不在Mojo中使用注释,我也不想在Java代码中使用变量,因为用户应该在属性文件中定义为我的变量,我不能更改核心Java代码来更改内容。

如果使用注释,请参阅 使用

用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

org.apache.maven
maven模型
2
org.apache.maven
马文项目
2

这意味着我应该为属性文件中的每个新条目定义一个新变量。对于pom文件,maven替换了表达式,我想在我的插件中完成这项工作,从属性文件中读取并获取表达式的值,或者,我想让maven获取表达式的值(不使用任何其他插件,因为我正在开发我的插件)在属性文件中?这是在maven插件中获取MavenProject的方法。如果你想对资源插件之类的文件进行过滤,你必须看一下该组件有没有一个示例如何使用它?它会将所有内容写入另一个目录吗?有什么可以避免的吗?你可以配置一些包含和/或排除来选择哪些资源。有关如何操作的任何提示:?
<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