2016-04-21 15 views
0

ich in meinem config.ini zu Setup-Eigenschaften versuchen, die unter Verwendung pom.xml in src/main/config angeordnet, wie in this answer beschrieben, aber es funktioniert nicht.Kann nicht dynamische Eigenschaft zu Maven Ressource auf Build-Pfad befand hinzufügen

Ich habe config.ini-src/main/config Datei platziert, wo die folgende Zeile vorhanden ist: runtime_mode=${runtime.mode} wenn ich Zugang zur Laufzeit runtime_mode Schlüssel versuche ich String bekommen ${runtime.mode} statt DEBUG oder PRODUCTION wie in pom.xml definiert. Wenn ich ${runtime.mode} in *.html Datei verwende, wird es wie erwartet durch entsprechenden Wert ersetzt.

Also, es funktioniert nicht nur, wenn Ressource bei Build-Pfad befindet.

Ich vermute, dass ich Ressource falsch definiere, kann aber nicht erkennen, was falsch ist.

Dies ist Teil meiner pom.xml bauen:

<project> 
    <properties> 
     <runtime.mode>DEBUG</runtime.mode> 
    </properties> 

    <build> 
     <finalName>${project.name}</finalName> 
     <resources> 
      <resource> 
      <directory>src/main/config</directory> 
      <filtering>true</filtering> 
     </resource> 
     </resources> 

     <plugins> 
      <plugin> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.1.1</version> 
       <configuration> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
        <webResources> 
         <resource> 
          <!-- this is relative to the pom.xml directory --> 
          <directory>src/main/webapp</directory> 
          <filtering>true</filtering> 
          <includes> 
           <include>bower.json</include> 
           <include>index.html</include> 
          </includes> 
         </resource> 
        </webResources> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.0.2</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Meine App ist ein war Projekt mithilfe des folgenden Urbild erstellt:

<archetype> 
     <groupId>com.ibm.tools.archetype</groupId> 
     <artifactId>webapp-jee7-liberty</artifactId> 
     <version>1.0</version> 
     <description>JEE7 web application targeting WebSphere Liberty archetype</description> 
</archetype> 

UPDATE: meine Verschoben config.ini-src\main\resources und änderte meine <resource> Markierung wie folgt:

Aber jetzt kann ich keine Ressource in src/main/resources aus dem Code zu lesen, zum Beispiel habe ich dort sql.xml wo alle meine SQL-Abfragen.

durch folgenden Code lesen Trying:

private static Properties readProperties(String xmlFileName) throws Exception { 
     Properties properties = new Properties(); 
     InputStream is = SQLProvider.class.getClassLoader().getResourceAsStream(xmlFileName); 
     properties.loadFromXML(is); 
     return properties; 
    } 

Aber es wirft einen Fehler:

java.lang.NullPointerException 
    at java.util.Objects.requireNonNull(Objects.java:203) ~[?:1.8.0_45] 
    at java.util.Properties.loadFromXML(Properties.java:881) ~[?:1.8.0_45] 
    at ***.SQLProvider.readProperties(SQLProvider.java:26) ~[classes/:?] 
+0

Hat Ihr Urbild einen archetype.xml haben oder ein Urbild-metadata.xml in META-INF-Verzeichnis? – Ahatius

+0

Zuerst: Setzen Sie 'config.ini' stattdessen in' src/main/resources'. Dieser Ordner ist speziell für diese Art von Dateien gedacht. Zweitens: Die Ersetzung geschieht aufgrund des ' true' -Elements in der Datei 'pom.xml', aber Sie haben' config.ini' nicht in die Filterung aufgenommen. Deshalb findet die Ersetzung nur in der Datei 'index.html' statt. – MichaelK

+0

@Ahatius, nein, hat es nicht – Anatoly

Antwort

0

try maven-replacer-plugin verwenden Sie einen Token in externen Datei definiert ersetzen kann.

Beispiel

 <properties> 
     <runtime.mode>DEBUG</runtime.mode> 
     </properties> 

    <plugin> 
      <groupId>com.google.code.maven-replacer-plugin</groupId> 
      <artifactId>maven-replacer-plugin</artifactId> 
      <version>1.4.0</version> 
      <executions> 
       <execution> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>replace</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <ignoreMissingFile>false</ignoreMissingFile> 
       <file>path to file/config.ini</file> 
       <regex>false</regex> 
       <replacements> 
        <replacement> 
         <token>$runtime.mode$</token> 
         <value>${runtime.mode}</value> 
        </replacement> 
       </replacements> 
      </configuration> 
     </plugin>