2016-05-29 113 views
0

如何使用maven提供的插件從.properties文件中讀取屬性,對於我當前的一個項目,我總是用<properties>標記pom.xml設置屬性,但這裏我的要求是,我將設置一些.properties文件中的所有屬性,例如:dev.properties。裏面有以下內容。如何使用maven插件從.properties中讀取值

spring.package=org.springframework 
spring.artifact=spring-core 
spring.version=3.0.5.RELEASE 

所以,現在我想將上面的屬性到pom.xml類似如下:How to read an external properties file in Maven

但它給了以下錯誤:

<dependencies> 
     <dependency> 
      <groupId>spring.package</groupId> 
      <artifactId>spring.artifact</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
    </dependencies> 

我通過這個環節了: Missing artifact org.springframework:spring-core:jar:spring.version

這裏是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> 

但是spring-core-3.0.5.RELEASE jar在maven倉庫中是有效的。 Maven中是否還有其他插件可以做同樣的事情,還是我在這裏錯過了任何其他配置。

如果我錯了,請糾正。

謝謝。

回答

0

請在下面找到更正的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> 

的問題是 -

<spring.version>spring.version</spring.version> 

標籤。它應該是

<spring-version>spring.version</spring-version> 

裏面的屬性標記。

BR

+0

嗨傑滕德拉,這是一個錯字的錯誤,我沒有通過,只有它給錯誤 – Creator

+0

能否請您發表您的POM文件相同。這樣我們可以更好地分析它。 – Jeet

+0

pom.xml已更新 – Creator

2

首先,當Maven將讀取你的pom.xml,它會立即與實際值取代佔位符,如${spring.version}指定爲

<properties> 
    <spring.version>spring.version</spring.version> 
</properties> 

所以通過後續變化值一個插件太晚了!但是,如果目前沒有可用的價值,Maven不會這樣做。因此,您可以從pom.xml中刪除這些屬性,並讓Maven插件稍後在構建生命週期中定義它們。這通常可以解決插件覆蓋的屬性的使用,但是...

其次,可能還有另外一個問題:在甚至執行任何插件之前,Maven可能會解析依賴關係(包括它們的版本),這會阻止您這樣做整件事。如果是這種情況,您可以將您的物業轉移到個人資料中,並改爲activate a certain profile

<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> 
+0

你永遠不應該通過屬性這將定義依賴的版本。如果你有不同的環境,你應該在每個環境中使用相同的依賴關係 – khmarbaise

+0

是的,雖然我不知道用例是什麼,但根據環境使用不同的版本確實是很危險的。 –