我有一个与提供命令行参数略有不同的解决方案。
我的项目是这样设置的:
| foo
- src
- conf
- logback.xml
- main
- test
我想要logback.xml
罐子的外面,因为我有scanPeriod
现场重新加载的装置。我想既然它应该在类路径中被拾取,我会将路径添加到manifest.mf
它,它会自动被拾取。
foo
的相关部分pom.xml
如下所示:
<plugins>
. . . Some plugins before
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/conf</outputDirectory>
<resources>
<resource>
<directory>src/conf</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.company.foo.main.Main</mainClass>
</manifest>
<manifestEntries>
<version>${project.version}</version>
<Class-Path>.</Class-Path>
<Class-Path>conf/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
. . . Some plugins after
</plugins>
需要注意的重要事项:
- Maven 资源插件
- 将所有文件复制
src/conf
到标准编译文件夹target/conf
中。
- Maven Jar 插件
- 将
conf
文件夹添加到MANIFEST.MF
的类路径中,这样您就无需在命令行上指定位置。
- 文件夹中的所有文件
conf
都将添加到类路径中,而不仅仅是logback.xml
为了让 jar 在这种情况下运行,该conf
文件夹必须放在 jar 旁边。它看起来像这样:
path/to/jar
| foo.jar
| lib/
| conf/
| logback.xml
MANIFEST.MF
看起来像这样:
Manifest-Version: 1.0
Built-By: $user
Class-Path: lib/x.jar lib/y.jar lib/z.jar conf/
version: 0.0.1-SNAPSHOT
Created-By: Apache Maven 3.5.2
Build-Jdk: 1.8.0_161
Main-Class: com.company.foo.main.Main