如何从jar文件中排除属性文件?
我有一个具有以下项目结构的java应用程序:
myProject | |----src | | | |--main | | | |--resources | | | |--userConfig.properties | |--log4j.properties | |---target
我正在使用Maven
来构建我的项目。 我正在使用maven
命令来构建jar文件,如下所示:
mvn package -DMaven.test.skip=true
我想从我的JAR文件中排除userConfig.properties
文件,所以我更新了我的pom.xml
,如下所示:
**/userConfig.properties
但它从编译代码所在的目标文件夹中排除。 并且应用程序将无法运行,因为它无法找到userConfig.properties
文件。
谁能帮我?
我也遇到过这种情况。 基本上,您希望能够使用一些易于访问的userConfig.properties文件从Eclipse本地运行代码,例如在/src/main/resources
。 此外,您希望使用外部userConfig.properties提供已编译的可执行JAR,以允许用户在不破解JAR的情况下配置应用程序。
我的实现如下:运行mvn clean install
会:
- 使用指定的
mainClass
创建可执行JAR - 从JAR中排除位于
src/main/resources
所有.properties
文件 - 将项目依赖项复制到项目根目录中的
lib
文件夹中 - 将位于
src/main/resources
所有.properties
文件复制到项目根目录中的conf
文件夹中。 请注意,此步骤是JAR用户的可选方便。 您可以要求在conf
目录中显式创建此文件。 此conf
目录通过清单有效地添加到运行时类路径中。 - 将此
conf
文件夹添加到清单,从可执行JAR提供对它的访问
在POM配置中将这些Maven插件相互结合使用可以满足您的需求。 至于这个解决方案的“最佳实践”; 我不确定。
使用maven-dependency-plugin如下:
org.apache.maven.plugins maven-dependency-plugin copy-dependencies prepare-package copy-dependencies ${project.build.directory}/lib false false true
使用maven-jar-plugin如下:
org.apache.maven.plugins maven-jar-plugin 2.3 **/*.properties true lib/ package.path.to.your.main.class.MainClass conf/
使用maven-resources-plugin如下:
org.apache.maven.plugins maven-resources-plugin 2.3 copy-resources install copy-resources ${basedir}/target/conf src/main/resources **/*.properties
使用这个项目设置,我可以使用一个配置在Eclipse中运行,并为我的用户提供一个配置的属性文件,而不会相互衔接。
你应该看看这个 。
... ... org.apache.maven.plugins maven-jar-plugin 2.3 **/userConfig.properties ... ...
我认为你可能已经正确地做了,取决于你配置排除的位置(用jar tf
检查你的jar中真正的文件)。 最有可能的是,您遇到了麻烦,因为该文件不在您的类路径中,因此您的应用无法找到它。 尝试将包含资源文件的目录添加到类路径中。
您可能希望放入一些默认值,让应用程序从预定义的路径读取其配置,以避免混淆类路径。