我有一个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}'
请帮帮我。
答案 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>