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/:?]
Hat Ihr Urbild einen archetype.xml haben oder ein Urbild-metadata.xml in META-INF-Verzeichnis? – Ahatius
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
@Ahatius, nein, hat es nicht – Anatoly