Reputation: 731
How to read the properties from .properties
file by using maven provided plugin, for one of my current project, I always used to set the properties in the <properties>
tag of pom.xml
, But here my requirement is, I will set the all properties in some .properties
file for ex: dev.properties. It is having the following content inside it.
spring.package=org.springframework
spring.artifact=spring-core
spring.version=3.0.5.RELEASE
So, now I want to set the above properties into the pom.xml
like the following:
<dependencies>
<dependency>
<groupId>spring.package</groupId>
<artifactId>spring.artifact</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
I gone through this link : How to read an external properties file in Maven
But it is giving the following error : Missing artifact org.springframework:spring-core:jar:spring.version
Here is the 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.ram</groupId>
<artifactId>DynamicProperties</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<spring.version>spring.version</spring.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<urls>
<url>file:///D:/Hadoop_Apps/DynamicProperties/src/main/resources/dev.properties</url>
</urls>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
But spring-core-3.0.5.RELEASE jar
is avail in maven repository.
Is there any other plugin in maven to do the same, or did I missed any additional config here.
Please correct if I am wrong.
Thanks.
Upvotes: 0
Views: 2080
Reputation: 4847
First of all, when Maven reads your pom.xml, it'll immediately replace placeholders such as ${spring.version}
with the actual value you specify as
<properties>
<spring.version>spring.version</spring.version>
</properties>
So changing the values later via a plugin is too late! Maven will not do this, however, if there's no value available at this time. Therefore you can remove these properties from pom.xml and let Maven plugin define them later in build lifecycle. This usually solves uses of properties overridden by plugins, but...
Second, there might be still another problem: Maven will likely resolve dependencies (including their versions) before even executing any plugin, which will prevent you from doing this whole thing. If that's the case, you can move your properties to a profile and activate a certain profile instead.
<properties>
<!-- default goes here, when no profile is used -->
<spring.version>3.0.4-RELEASE</spring.version>
</properties>
<profiles>
<profile>
<id>dev</id>
<properties>
<spring.version>3.0.5-RELEASE</spring.version>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.version>3.0.1-RELEASE</spring.version>
</properties>
</profile>
</profiles>
Upvotes: 3
Reputation: 5659
Please find below the corrected pom.
<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.ram</groupId>
<artifactId>DynamicProperties</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<spring-version>spring.version</spring-version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<urls>
<url>file:///${basedir}\src\main\resources\config.properties</url>
</urls>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
The problem was in -
<spring.version>spring.version</spring.version>
tag. It should have been
<spring-version>spring.version</spring-version>
inside properties tag.
BR
Upvotes: 0