我使用 maven-assembly-plugin 构建 Java 8 项目,并将其打包为 JAR 文件
我在src/main/resources
(通常的maven资源目录)中获得了多个资源。
创建JAR时,src/main/resources
下的所有资源文件都将复制到JAR的根目录。
在代码中,我尝试使用位于FileInputStream
中的src/main/resources
来打开文件,并且在运行项目时它运行良好而不将其打包为JAR文件。但是,当我从JAR文件运行项目时,我得到了很多FileNotFoundException
,因为我的资源不再是src/main/resources
,而是${project.basedir}
。
我希望它们位于JAR文件中的src/main/resources
。有可能吗?
我的构建配置如下:
<build>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<plugins>
<plugin>
<!-- Build an executable JAR -->
<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>EmployProject.TestAlgo</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>TestAlgo</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
修改
如果不可能,我的代码中应该使用什么来访问我的资源文件?
答案 0 :(得分:1)
感谢@khmarbaise和这篇文章:Accessing a Java Resource as a File
我发现我使用了错误的API来打开资源。 JAR中的资源不是文件,因此我改变了:
XMLDecoder xmlDec = new XMLDecoder(new InputFileStream(this.getClass().getResourceAsStream(fileName))
为:
InputStream in = EnumTools.class.getResourceAsStream(fileName);
XMLDecoder decoder = new XMLDecoder(in);