【问题标题】:Accessing Maven Pom Variables From Properties File从属性文件访问 Maven Pom 变量
【发布时间】:2013-01-23 16:18:26
【问题描述】:

我正在开发一个自定义的 Maven 插件。当我写:

${project.version}

在我的 pom 文件中,我可以获得它的值,但是如果我写入属性文件,有没有办法:

project.version = ${project.version}

这将正确设置 project.version 值,我如何在我的 Java 代码中实现它?

PS:我不在我的 Mojo 中使用注释,我不想在我的 Java 代码中使用变量,因为用户应该像在属性文件中一样定义我的变量,而我不能更改我的核心 Java 代码以改变事物。

【问题讨论】:

    标签: java maven pom.xml maven-plugin-development


    【解决方案1】:

    您可以使用Maven resource filtering,只需在<build> 中添加<resources> 并为您想要的任何内容打开过滤。

    【讨论】:

    【解决方案2】:

    如果使用注释,请在您的 mojo 中查看 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 文件,maven 替换了该表达式,我想在我的插件中完成这项工作并从属性文件中读取并获取表达式的值,或者我想让它 maven 来获取表达式的值(不使用任何其他插件,因为我正在开发我的)在属性文件中?
    • 这是在 Maven 插件中获取 MavenProject 的方法。如果您想对资源插件等文件进行一些过滤,您必须查看组件maven.apache.org/shared/maven-filtering
    • 有例子如何使用吗?
    • 它将所有内容写入另一个目录有什么可以避免的吗?
    • 您可以为maven.apache.org/ref/3.0.4/maven-model/apidocs/org/apache/maven/… 配置一些包含和/或排除来选择哪些资源。
    【解决方案3】:

    您可以像我在此函数中所做的那样读取并保存 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
    

    【讨论】:

      猜你喜欢
      • 2012-03-31
      • 2012-12-21
      • 2012-07-15
      • 2011-10-31
      • 2013-06-07
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      相关资源
      最近更新 更多