2013-07-11 1 views
0

모든 종속 파일과 리소스가 패키지로 포함 된 실행 가능 jar 파일을 만드는 데 문제가 있습니다. 지금까지 나는 항아리 안에 모든 것을 가지고 있지만 항아리 밖에있는 자원을 찾고 있습니다. 여기 Maven pom이 jar 파일 외부의 리소스를 찾고 있습니다.

는 내 프로젝트의 구조입니다 : 나는에 패키지 의존성과 실행 항아리를 만들 수 있어요

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

및 자원 그러나 그것은 여전히 ​​자원을 찾고있다,뿐만 아니라 포장된다 JAR 파일이 아닌 "resources"폴더.

항아리는 다음과 같습니다

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

그래서 내 문제는 이것이다 : 나는 그것을 실행하려고하면

MyProject.jar 
----images 
----resources 
----... 

, 나는이 오류가 내 의존성과 자원이 포장됩니다 내가 원하는 것처럼 jar하지만 실행시 JAR이 아닌 "target /"폴더에서 "resources /"를 찾습니다.

<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

문제는 위의 코드와 함께 문제가되지 않는다고 생각합니다. 예외를 던지는 코드 줄을 게시하십시오. – Aurand

+0

JAR 내부에있는 파일을 읽고 JAR에 패키지 된 리소스에 안정적으로 액세스하려면 'ClassLoader.getResourceAsStream'을 사용하지 않는 것이 좋습니다. –

답변

0

Java 빌드 경로를 살펴보십시오. 리소스의 기본 출력 폴더가 잘못되었을 수 있습니다. 자원 내용이 제대로 복사되지 않는 이유가 여기에 있습니다.