我知道這個問題之前被問過很多次,但我仍然無法管理它的工作。 我想要實現的是創建jar,它將在運行時加載資源(打包成jar),而不會在從Eclipse執行應用程序時破壞資源加載。Eclipse和Maven - 罐子裏的資源
我的項目的結構標準:
src/main/java
src/main/resources
src/test/java
src/test/resources
代碼加載圖像資源:開始從Eclipse應用程序時
ClassLoader classLoader = getClass().getClassLoader();
splashImage = ImageIO.read(new File(classLoader.getResource("img/splash.png").getFile()));
這是工作的罰款。但是,當我從Eclipse中導出可運行jar時,它不起作用。
導出的jar有/ resources/img文件夾放在它的根目錄下。但是,應用程序啓動時,會拋出異常:
Caused by: javax.imageio.IIOException: Can't read input file!
它是如何可能使它從運行的JAR文件工作,並從Eclipse運行應用程序時?
我也試圖用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>
我認爲資源目錄中的文件應該放在classpath的根目錄下,而不是放在名爲resources的文件夾中。你目前如何製作jar文件? – thatidiotguy 2015-01-20 19:05:38
有兩種方法:從eclipse和mvn安裝中導出可運行的jar。沒有人工作 – MGorgon 2015-01-20 19:06:55
那麼問題是你的'img'文件夾在資源文件夾下。根據您提供的代碼,它應該位於類路徑的頂部。 – thatidiotguy 2015-01-20 19:08:56