我在java SE中设置了基本的maven项目,资源为:
main
-java
-resources
-config -> database.properties
现在因为我不想在最后一个jar中使用这个资源,所以我定义:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<excludes>
<exclude>config/database.properties</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>make-jar-ultimateParser</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dist</outputDirectory>
<finalName>testApp</finalName>
<archive>
<compress>false</compress>
<!-- Manifest - MainClass & ClassPath -->
<manifest>
<mainClass>aa.bb.Class</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>config/database.properties</Class-Path>
</manifestEntries>
</archive>
</configuration>
</execution>
</executions>
</plugin>
<!-- Copy configuration files -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dist/config</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/config</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
所以资源在classpath上,带有资源的目录被复制到最终的jar中。
我的清单看起来像这样:“Class-Path:config / database.properties”
但我无法阅读它:
String db = "/config/database.properties";
properties = new Properties();
properties.load(getClass().getResourceAsStream(db));
我尝试了绝对/相对路径getClass()/ClassLoader
。没有。它在NetBeans中完美运行,但就是这样。
答案 0 :(得分:1)
你误解了Maven Resources插件的功能。它只是将资源(可能带有转换)复制到构建输出目录中。然后将它们包含在构建工件(JAR,WAR,等等)中。
要使其工作(使用Class-Path
清单条目引用JAR的目录),您需要单独分发配置文件。或者使用File
引用它,而不是打扰类路径。
更好的方法是将应用程序分发为程序集,其中包含核心应用程序,任何依赖项和配置文件。这通常被打包为ZIP文件,用户可以将其解压缩以进行安装。
答案 1 :(得分:0)
我不明白为什么要排除它。 Maven使用自己的资源dir。
项目
| - pom.xml
-- src
- 主要
` - 资源
它让程序员的生活变得更轻松。当你使用这种方式时,不需要获得classpatch或其他。