我有一个具有以下项目结构的java应用程序:
myProject
|
|----src
| |
| |--main
| |
| |--resources
| |
| |--userConfig.properties
| |--log4j.properties
|
|---target
我在用Maven
构建我的项目。我在用maven
构建jar文件的命令如下:
mvn package -DMaven.test.skip=true
我想排除userConfig.properties
我的 JAR 文件中的文件,所以我更新了我的pom.xml
如下:
<excludes>
<exclude>**/userConfig.properties</exclude>
</excludes>
但它会从编译代码所在的目标文件夹中排除。
并且应用程序将无法运行,因为它无法找到userConfig.properties
file.
谁能帮我?
我也遇到过这种场景。基本上,您希望能够使用一些工具从 Eclipse 本地运行代码用户配置属性易于访问的文件,例如内部/src/main/resources
。此外,您希望提供一个已编译的可执行 JAR 以及外部用户配置属性允许用户在不破解 JAR 的情况下配置应用程序。
我的实现如下:运行mvn clean install
will:
- 使用指定的创建可执行 JAR
mainClass
- 排除所有
.properties
文件位于src/main/resources
从 JAR 中
- 将项目依赖项复制到
lib
项目根目录中的文件夹
- 全部复制
.properties
文件位于src/main/resources
into a conf
项目根目录中的文件夹。请注意,此步骤是一个可选步骤,可为 JAR 用户提供便利。您可以要求在conf
目录。这conf
目录通过清单有效地添加到您的运行时类路径中。
- 添加这个
conf
文件夹到清单,提供从可执行 JAR 对其的访问
在 POM 配置中结合使用这些 Maven 插件将为您提供所需的功能。至于该解决方案的“最佳实践”;我不知道。
Using maven 依赖插件如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
Using maven-jar-插件如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3</version>
<configuration>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>package.path.to.your.main.class.MainClass</mainClass>
</manifest>
<manifestEntries>
<Class-Path>conf/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
Using maven-资源-插件如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</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>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
使用此项目设置,我可以使用一个配置在 Eclipse 中运行,并为我的用户提供一个要配置的属性文件,而无需属性相互干扰。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)