我知道这个问题以前被问过很多次,但是我仍然不能管理它工作。我想实现的是创建一个在运行时加载资源(打包在jar中)的jar,而不会在执行Eclipse应用程序时中断资源加载。
我的项目结构是标准的:
src/main/java
src/main/resources
src/test/java
src/test/resources
加载图像资源的代码:
ClassLoader classLoader = getClass().getClassLoader();
splashImage = ImageIO.read(new File(classLoader.getResource("img/splash.png").getFile()));
从Eclipse启动应用程序时,它工作正常。然而,当我从Eclipse导出runnable jar时,它不起作用。
导出的jar在其根目录中有/resources/img文件夹。但当应用程序启动时,会引发异常:
Caused by: javax.imageio.IIOException: Can't read input file!
当从Eclipse运行应用程序时,如何从runnable jar文件使其工作?
我还试图用maven插件构建jar,但没有成功。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>foo.bar.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
您应该按照以下方式加载资源:
classLoader.getResourceAsStream("/img/splash.png")
关键是src/main/resources
将自动复制到target/class
,这是类路径的根。这在Eclipse中也适用于打包的jar。
maven将通过maven assembly插件创建一个可运行的jar,如下所示:
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
[...]
</project>
添加后,您可以通过以下方式创建完整的可运行jar:
mvn clean package
这将在目标
文件夹中生成一个jar文件,该文件看起来像:'无论-1.0-SNAPSHOT-jar-with-dependencies.jar'。
我不明白的是maven依赖插件在你的构建中的用法?
问题内容: 我有一个问题,那个maven正在Eclipse安装文件夹中寻找资源。 这是说: 当我的工作区在内部时。 pom.xml是否有任何配置以命令它从其位置看起来是相对的? 编辑#1: 我正在从Eclipse运行Maven。从命令行可以毫无问题地进行编译。 我正在尝试运行Junit测试。 编辑2: 所有依赖项,web.xml等都可以- 我知道这是因为其他开发人员在Linux上和Idea上使用的
问题内容: 我有一些可怕的行为。我有以下Maven配置: 这将创建包含所有类的JAR文件,但我在类路径中有一些资源也应包括在内。如果我将参数放在阶段的前面,那么我的所有资源都会包括在内。如果我使用运行Maven ,则不包含任何资源。我的资源位于(不是通常的目录)下。 问题答案: 目标配置中未正确定义资源的源目录。同样,outputDirectory元素将资源放置在dir中,默认情况下将其打包。试试
我有一些可怕的比目鱼。我有以下Maven配置: 这创建了包含所有类的JAR fie,但我在类路径中有一些资源也应该包括在内。如果我将参数留在phase前面,那么我的所有资源都包括在内了。如果我使用运行maven,则不包含任何资源。我的资源在(不是通常的目录)下。
我正在尝试使用Eclipse(版本Kepler SR2)将一个Java项目打包到一个可运行的jar中。这个项目使用的是Maven(这是我学习的,我对它不太了解)。问题是,该项目在Eclipse中运行良好,但在导出到Jar后,它再也找不到所需的任何资源。 下面是文件夹结构: 资源是通过以下方式加载的: 当从Eclipse执行程序时,这一行工作得非常好,但当使用我用“export>java>runna
在使用Maven捆绑JAR文件中的资源时,我有一种感觉,我错过了一些关键的东西。我的目录结构是标准的Maven结构(即\src\main\java,\src\main\Resources)。 使用IDE时,我将资源文件引用为\main\resources\images\blah。。。它工作得很好,但当Maven捆绑JAR文件时,它会将路径放在相对于根的位置(“\ images\blah”),因此没
我正在使用maven插件创建一个JAR。但是文件夹中的所有文件都直接放在JAR中,而不是resources文件夹中。(根本没有在JAR中创建resources文件夹) 因此,使用JAR的应用程序无法找到log4j2。xml文件。早期的resources文件夹正在创建中,但现在不知何故它没有被创建。 波姆。xml: 项目结构: 罐子结构: 在应用控制台我得到消息: 错误状态记录器Log4j2找不到日