2013-07-11 102 views
0

我在創建一個包含所有依賴關係和資源的可執行jar時遇到了麻煩。到目前爲止,我擁有罐子裏的所有東西,但它正在尋找罐子旁邊的資源。尋找罐外資源的Maven pom

這裏是我的項目的結構:

MyProject 
----images 
----resources 
----src 
----... 

我能夠創建打包的依賴關係的可執行的JAR和資源打包爲好,但它仍然是尋找資源「資源」文件夾,而不是在JAR中。

罐子看起來是這樣的:

​​

當我嘗試運行它,我得到這個錯誤:

java.io.FileNotFoundException: .../MyProject/target/resources/default-style.xml (No such file or directory) 

所以我的問題是這樣的:我的依賴關係和資源打包在像我想要的jar,但一旦執行它正在尋找「資源/」在「目標/」文件夾中,而不是在JAR中。

這裏是我的POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<!-- MyProject INFO --> 
<groupId>Main</groupId> 
<artifactId>MyProject</artifactId> 
<version>0.0.1-beta</version> 
<name>MyProject</name> 
<packaging>jar</packaging> 
<!-- DEPENDANCIES --> 
<dependencies> 
    <dependency> 
    <groupId>custom</groupId> 
    <artifactId>custom</artifactId> 
    <version>1.0.0</version> 
</dependency>  
    <dependency> 
     <groupId>jgraphx</groupId> 
     <artifactId>jgraphx</artifactId> 
     <version>1.0.0</version> 
</dependency> 
</dependencies> 

<build> 
    <sourceDirectory>src</sourceDirectory> 
<!-- RESOURCES --> 
    <resources> 
     <resource> 
     <directory>src</directory> 
     <filtering>true</filtering> 
     </resource> 
     <resource> 
     <directory>${basedir}/images</directory> 
    <filtering>false</filtering> 
    <targetPath>images</targetPath> 
     </resource> 
     <resource> 
     <directory>${basedir}/resources</directory> 
    <filtering>false</filtering> 
    <targetPath>resources</targetPath> 
     </resource> 
    </resources> 
    <testResources> 
     <testResource> 
     <directory>src</directory> 
     </testResource> 
    </testResources> 
    <plugins> 
<!-- For Java 6, you need to configure the maven-compiler-plugin. Add this to your pom.xml: --> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
     </configuration> 
     </plugin> 
<!-- CREATE EXECUTABLE JAR WITH DEPENDANCIES --> 
    <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <configuration> 
     <archive> 
      <manifest> 
     <mainClass>Main.Main</mainClass> 
      </manifest> 
     </archive> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     </configuration> 
     <executions> 
     <execution> 
      <id>make-assembly</id> <!-- this is used for inheritance merges --> 
      <phase>package</phase> <!-- bind to the packaging phase --> 
      <goals> 
     <goal>single</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 
</project> 

編輯:看起來它可能是我的代碼,而不是。我會看看,謝謝! (我公司的代理塊大部分是stackoverflow,所以我不能回覆評論> <這就是爲什麼我在這裏寫的。謝謝Jigar Joshi和Aurand!)

+0

它是你的代碼是從特定的固定位置讀取文件,我認爲 –

+0

聽起來像這個問題不是用maven,而是用你的代碼。請張貼引發異常的代碼行。 – Aurand

+0

可能是,您正在嘗試讀取JAR內的文件,而不是使用'ClassLoader.getResourceAsStream',如果您想訪問JAR中可靠打包的資源,則必須執行此操作。 –

回答

0

看看java構建路徑。資源的默認輸出文件夾可能不正確。可能是因爲資源內容沒有正確複製。