【问题标题】:How to use properties-maven-plugin?如何使用properties-maven-plugin?
【发布时间】:2015-07-21 17:58:11
【问题描述】:

我想使用 properties-maven-plugin。我阅读了 http://mojohaus.org/properties-maven-plugin/usage.html 的用法,但它对我不起作用。

我创建了一个非常简单的项目来测试它。这是我的 pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>MavenTest</artifactId>
  <version>1.0.0</version>
  <name>MavenTest</name>

  <properties>
    <prop1>2.2</prop1>
  </properties>

  <dependencies>
    <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j.version}</version>
        </dependency>
  </dependencies>

  <build>
    <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>properties-maven-plugin</artifactId>
                <version>1.0-alpha-2</version>
                <executions>
                    <execution>
                        <phase>initialize</phase>
                        <goals>
                            <goal>read-project-properties</goal>
                        </goals>
                        <configuration>
                            <files>
                                <file>${basedir}/my.properties</file>
                            </files>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    <pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        org.codehaus.mojo
                                    </groupId>
                                    <artifactId>
                                        properties-maven-plugin
                                    </artifactId>
                                    <versionRange>
                                        [1.0-alpha-2,)
                                    </versionRange>
                                    <goals>
                                        <goal>
                                            read-project-properties
                                        </goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
  </build>
</project>

如果我运行 mvn compile 或 mvn install 结果是:

[ERROR] The build could not read 1 project -> [Help 1]
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[ERROR] 'dependencies.dependency.version' for org.apache.logging.log4j:log4j-api:jar must be a valid version but is   '${log4j.version}'. @ line 16, column 13

“my.properties”文件包含以下内容:

 log4j.version=2.2    

如此处所述:mojohaus

如果我使用 pom.xml 中定义的 prop1 属性,则一切正常。

那么我做错了什么?

【问题讨论】:

  • 你把文件放在正确的目录了吗?意味着您在启动 maven build 时没有收到任何错误或警告?
  • 是的,我做到了。 Eclipse 的有效 pom 视图显示了正确的(绝对)文件路径。而我只得到了那个错误,显示在问题中
  • 这个问题没有解决办法?我有同样的问题..
  • 我在 Github 项目here987654323@上开了一个问题
  • 我也有同样的问题

标签: java maven


【解决方案1】:

您必须在要使用它们时定义版本属性。该插件只允许您这样做;但是您必须自己设置值。 喜欢

<properties>
    <log4j.version>1.2.17</log4j.version>
</properties>

编辑:

正如你所展示的,你已经做到了。现在看来,当您在执行中定义目标时,它仅在该执行中有效。 尝试将其声明为全局:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-2</version>
    <configuration>
        <files>
            <file>${basedir}/my.properties</file>
        </files>
    </configuration>
...

【讨论】:

  • 我忘了显示我的属性文件,现在问题已被编辑。对于您的回答:如果我在 pom.xml 中定义属性,一切正常。但我想将属性存储在外部文件中。
  • 我将其声明为全局(如您的回答),但我得到了同样的错误;(
【解决方案2】:

确保您存在具有该特定属性值对的 ${basedir}/my.properties 文件: my.properties 内容应该是: prop1=2.3

【讨论】:

    【解决方案3】:

    他们的官方回答是不支持使用 read-project-properties 设置依赖版本:https://github.com/mojohaus/properties-maven-plugin/issues/26

    这不起作用,也不是 properties maven 插件的意图,此外,从文件中读取属性以定义依赖项版本有什么好处?

    在这个答案上有一个非常透彻的解释:https://*.com/a/14727072/1707491

    【讨论】:

    • 我认为主要优点是其他工具可以从同一个属性文件中读取。
    【解决方案4】:

    maven 方法是在* POM 中使用该元素,该 POM 包含具有公共依赖项的项目。这是最简单的方法。

    您还可以导入专门用于依赖管理的 POM。导入方式不需要父/子项目关系。

    查看 Maven 文档:

    1. Dependency Management
    2. Importing Dependencies

    【讨论】: