如何从属性文件中读取依赖版本

时间:2017-01-10 05:28:52

标签: java maven maven-plugin

我有一个maven项目。我想将maven dependancy版本外部化到外部属性文件。 我尝试使用属性文件插件我没有读取属性文件。

config.properties

springframework.version=4.2.5.RELEASE

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>com.estuate.test</groupId>
<artifactId>testPom</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-1</version>
            <executions>
                <execution>
                    <phase>pre-clean</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                    <configuration>
                        <files>
                            <file>config.properties</file>
                        </files>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${springframework.version}</version>
    </dependency>
</dependencies>

仍然是我收到错误消息

build.plugins.plugin[org.codehaus.mojo:properties-maven-plugin].dependencies.dependency.version' for org.springframework:spring-core:jar must be a valid version but is '${springframework.version}'

请帮帮我。

3 个答案:

答案 0 :(得分:2)

当您添加带有自定义执行的插件时,您必须意识到它只在您指定的阶段执行。您指定预清洁阶段,该阶段是清除生命周期的一部分,而不是构建生命周期的一部分。

Maven由生命周期组成,可执行到给定阶段。命令mvn compile实际上意味着运行构建生命周期所有阶段,包括编译阶段。

两个标准生命周期(不完整列表):

clean :: pre-clean -> clean -> post-clean

build :: validate -> compile -> test -> package -> verify -> install -> deploy

编译阶段的标准插件可能会使用指定的依赖项,因此此时需要提供属性。

当您说明预清洁阶段时,执行mvn clean时可以使用属性。

对于编译阶段可用的属性,您可能应该绑定到验证阶段。

虽然非常详细,但实际上有很多提示在mvn -X的调试模式下运行,但最初可能要理解得太多。

有关maven生命周期的更多信息,请访问:https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

答案 1 :(得分:0)

您可以使用maven属性插件,这是在maven项目中读取属性文件的建议方法之一。以下是插件详细信息

  <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-1</version>
            <executions>
              <execution>
                <phase>initialize</phase>
                <goals>
                  <goal>read-project-properties</goal>
                </goals>
                <configuration>
                  <files>
                    <file>Versions.properties</file>
                  </files>
                </configuration>
              </execution>
            </executions>
          </plugin>
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${springframework.version}</version>
    </dependency>
</dependencies>

Version.properties文件看起来像

springframework.version = 4.2.5.RELEASE

答案 2 :(得分:-1)

我想。 您应该将Spring版本分配给springframework.version语句。 例如

     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-core</artifactId>
       <version>4.3.1-REALESE</version>
     </dependency>

然后是其他依赖项

<dependency>
    <groupId>...framework...</groupId>
    <artifactId>spring-...</artifactId>
    <version>${springframework.version}</version>
</dependency>