我尝试使用config.ini
中的src/main/config
设置pom.xml
中的属性,如this answer中所述,但不是src/main/config
工作
我已经放置到config.ini
文件runtime_mode=${runtime.mode}
,其中存在以下行:runtime_mode
当我尝试在运行时${runtime.mode}
键访问时,我得到了字符串{ {1}}代替pom.xml
中定义的 DEBUG 或 PRODUCTION 。当我在${runtime.mode}
文件中使用*.html
时,它会被预期的适当值替换。
因此,仅当资源位于构建路径时,它才起作用。
我怀疑我是以错误的方式定义资源,但却无法意识到错误。
这是我pom.xml
的构建部分:
<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>
我的应用是使用以下原型创建的war
项目:
<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>
更新:
已将我的config.ini
移至src\main\resources
并更改了我的<resource>
代码,如下所示:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>config.ini</include>
</includes>
</resource>
</resources>
但是现在我无法从代码中读取src/main/resources
中的任何资源,例如我将sql.xml
放在我所有的SQL查询中。
通过以下代码尝试阅读:
private static Properties readProperties(String xmlFileName) throws Exception {
Properties properties = new Properties();
InputStream is = SQLProvider.class.getClassLoader().getResourceAsStream(xmlFileName);
properties.loadFromXML(is);
return properties;
}
但它引发了一个错误:
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 :(得分:0)
尝试使用maven-replacer-plugin您可以替换外部文件中定义的任何令牌。
示例
<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>