2017-04-21 54 views
0

我已經嘗試過類似的努力的一些答案,但沒有什麼我想要實現比較適合...行家:屬性路徑不會被替換(讀第二其它屬性文件)

這是我m試圖做:

我想基於(其他)屬性文件生成(過濾)屬性文件。

我們有一個屬性文件,其中包含一般屬性。該文件(現在是default.properties)被讀取並解析爲一個魅力。

然後,我們也想根據環境具體的屬性。 (我知道,不是好的做法,但是這是最好的解決方案,因爲我們有自主建立在不同的機器上,併產生所有屬性​​的無處不在方便)

這就是我們陷入困境......

當指定一個包含屬性的路徑(在這種情況下爲targetEnvironment)時,它不會被填充其值。

  • 我已經嘗試切換階段(生成資源/初始化/處理資源);與
  • 使用CLI屬性:​​
  • 使用的配置文件調用:

<profiles> 
    <profile> 
     <id>nt</id> 
     <properties> 
      <targetEnvironment>NT</targetEnvironment> 
     </properties> 
    </profile> 
</profiles> 

這是(部分)當前POM(僅相關部分(聚甲醛內)顯示):

<project> 

(some maven code) 

    <build> 

    (other maven code) 

     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>properties-maven-plugin</artifactId> 
       <version>1.0.0</version> 
       <executions> 
        <execution> 
         <id>execution1</id> 
         <phase>generate-resources</phase> 
         <goals> 
          <goal>read-project-properties</goal> 
         </goals> 
         <configuration> 
          <files> 
           <file>src/env_properties/env/${targetEnvironment}/specific.properties</file> 
          </files> 
         </configuration> 
        </execution> 
        <execution> 
         <id>execution2</id> 
         <phase>generate-resources</phase> 
         <goals> 
          <goal>read-project-properties</goal> 
         </goals> 
         <configuration> 
          <files> 
           <file>src/env_properties/env/default/default.properties</file> 
          </files> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>com.soebes.maven.plugins</groupId> 
       <artifactId>maven-echo-plugin</artifactId> 
       <version>0.1</version> 
       <executions> 
        <execution> 
         <phase>initialize</phase> 
         <goals> 
          <goal>echo</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <echos> 
         <echo>Animal: src/env_properties/env/${targetEnvironment}/specific.properties</echo> 
         <!-- prints: src/env_properties/env/NT/specific.properties --> 
        </echos> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>3.0.2</version> 
       <executions> 
        <execution> 
         <id>copy-resources</id> 
         <phase>process-resources</phase> 
         <goals> 
          <goal>copy-resources</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${basedir}/target/extra-resources</outputDirectory> 
          <resources> 
           <resource> 
            <directory>src/env_properties/base</directory> 
            <filtering>true</filtering> 
           </resource> 
          </resources> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

奇怪的是,

,如果我用文字「NT」它的工作原理替換$ {} targetEnvironment,所以機制的工作,只有不更換...

我也試圖更改插件版本,但某些版本甚至使它更糟...

任何想法?

感謝,

S.

編輯:另一個奇怪的事情,如果我不建了-DtargetEnvironment=NT參數我得到一個構建失敗的原因是:

[INFO] 
[INFO] --- properties-maven-plugin:1.0.0:read-project-properties (execution1) @ batch3 --- 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 5.644 s 
[INFO] Finished at: 2017-04-21T15:55:11+02:00 
[INFO] Final Memory: 41M/459M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.codehaus.mojo:properties-maven-plugin:1.0.0:read-project-properties (execution1) on project batch3: Properties could not be loaded from File: C:\path\to\src\env_properties\env\${targetEnvironment}\specific.properties -> [Help 1] 
[ERROR] 

回答

0

我不知道該怎麼解決原來的問題,但我發現了一些做我想做的事情:

如果你有一個屬性文件(用值來替換其他值的值操作文件;例如:)

(頂級。屬性)

ejb.server.url=not yet defined 
ejb.server.user=not yet defined 
ejb.server.pwd=not yet defined 

和特定的屬性文件(基於通過調用例如​​)

(SRC \ env_properties \ ENV \ NT \ specific.properties)

garrafra.doesntbestaat=anotherTest 
在構建時提供的屬性

那麼第一個屬性可以這樣寫:

<build> 

     (some maven code) 

     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>properties-maven-plugin</artifactId> 
      <version>1.0.0</version> 
      <executions> 
       <execution> 
        <id>execution1</id> 
        <phase>initialize</phase> 
        <goals> 
         <goal>read-project-properties</goal> 
        </goals> 
        <configuration> 
         <files> 
          <file>src/env_properties/env/default/top_level.properties</file> 
         </files> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     (other maven code) 

    </build> 

可以使用此文件中的屬性來檢索(例如路徑)更具體的屬性文件。

...和(當然在相同的標籤)特定屬性文件(一個或多個)可被讀取(並且施加用於過濾)所示:

<build> 

     (some maven code) 

     <filters> 
      <filter>src/env_properties/env/${targetEnvironment}/specific.properties</filter> 
     </filters> 

     (other maven code) 

    </build> 

提供這在屬性-maven-插件沒有出於某種原因爲特定的(與環境相關的)工作...

無論是一般(頂層)性能得到填補:

(vanilla.properties(前):)

java.naming.provider.url=${ejb.server.url} 
java.naming.security.principal=${ejb.server.user} 
java.naming.security.credentials=${ejb.server.pwd} 

blie=${garrafra.doesntbestaat} 

(後)

java.naming.provider.url=not yet defined 
java.naming.security.principal=not yet defined 
java.naming.security.credentials=not yet defined 

blie=anotherTest