我正在为我的项目创建一个uber jar,即具有依赖项的jar。我有一堆项目使用的属性文件。我希望能够在运行我的项目之前更改这些属性文件,所以我希望它们在jar之外。这是我的聚甲醛的有关章节Uber jar没有读取外部属性文件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2</version>
<configuration>
<artifactSet>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.json</exclude>
</excludes>
</artifactSet>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>path.to.main.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
<Class-Path>conf/</Class-Path>
</manifestEntries>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/conf</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.json</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
所以基本上,我想创建一个文件夹${basedir}/target/conf
和所有.properties
和.json
文件复制到它。另外,这里是我正在读
InputStream in = this.getClass().getClassLoader().getResourceAsStream("filename.properties");
我现在面临几个问题
当我做
mvn clean install
的文件,我仍然看到classes
文件夹中的所有.properties
和.json
文件。他们不应该被排除在外?的
conf
文件夹的所有文件的创建,但是当我运行jar ADN试图改变属性,在更改不会拿起。我如何确保conf
文件夹被添加到类路径中?我希望能够在我正在开发,所以我不希望把它们放在一个单独的文件夹,从文件夹
src/main/resources
加载.properties
和.json
文件。这可能吗?