[英]Uber jar not reading external properties files
我正在创建一个uber jar,即我的项目具有依赖性的jar。 我有一堆该项目使用的属性文件。 我希望能够在运行项目之前更改这些属性文件,因此我希望它们位于jar之外。 这是我pom的相关部分
<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和尝试更改属性时,所做的更改不会被提取 。 如何确保将conf
文件夹添加到类路径?
我希望在开发时能够从src/main/resources
文件夹中加载.properties
和.json
文件,所以我不想将它们放在单独的文件夹中。 这可能吗?
我面临着Uber jar不读取外部配置文件的相同问题。 我尝试了以下配置,它像魅力一样工作。 请参阅下面的配置,它可能会帮助遇到uber jar问题的人不读取extenarl文件。 我不确定这是否是最好的方法,但是还没有在线找到任何灵魂:)
在类路径/ conf中,从外部文件夹读取属性。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.3</version> <executions> <!-- Run shade goal on package phase --> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> add Main-Class to manifest file <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>JobName</Main-Class> <Class-Path>conf/</Class-Path> </manifestEntries> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer"> <resource>src/main/resources/config.properties</resource> <file>${project.basedir}/src/main/resources/config.properties</file> </transformer> </transformers> <finalName>FinalJarName</finalName> <filters> <filter> <artifact>groupId:artifactId</artifact> <excludes> <exclude>**/*.properties</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin>
祝好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.