如何从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中真正的文件)。 最有可能的是,您遇到了麻烦,因为该文件不在您的类路径中,因此您的应用无法找到它。 尝试将包含资源文件的目录添加到类路径中。

您可能希望放入一些默认值,让应用程序从预定义的路径读取其配置,以避免混淆类路径。