2013-01-23 3 views
3

jar 파일 외부에서 구성 파일을 읽을 수있는 jar 파일을 만들려고합니다. 가급적이면 jar 파일이있는 디렉토리에서 확인하십시오. 내 디렉토리 구조는 다음과 같습니다 :jar 파일 외부에서 config 파일을 읽습니다.

/src/main/resources/config 

나는 mvn 프로젝트를 실행하여 jar 파일을 만듭니다. 나는 그러나 받는다는 조립 플러그인을 연구 한 나는 그것의 모든 다른 구성을 시도하고 내가 할 수 없습니다/대상/설정에

<plugin> 
      <!-- Build an executable JAR --> 
      <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>com.expedia.e3.qm.perforce.audit.Main</mainClass> 
        </manifest> 
        <manifestEntries> 
         <Class-Path>config/config.xml</Class-Path> 
        </manifestEntries> 
       </archive> 
       <excludes> 
        <exclude>**/config/</exclude> 
       </excludes> 
      </configuration> 
     </plugin> 

지금 내가 수동에서/목표 내 config 폴더를 이동하고/클래스/설정/target/config에만 출력하도록하십시오. /target/audit-1.0/config 여기서 audit-1.0은 내 maven 프로젝트 이름입니다.

내 프로그램을 디버깅하고 maven 프로젝트를 빌드/설치하려면 Intellij IDEA를 사용하고 있습니다. 코드에서

내가 명령 줄에서 실행할 때 나는 내가 IDE에서 실행할 때 작동

InputStream stream = Class.class.getResourceAsStream("/config/config.xml"); 

를 통해 파일에 액세스하려고 :

java -jar ./audit-1.0.jar 

그것은이를 던졌습니다 "inputStream"에 액세스하려고 시도한 후 오류가 발생했습니다. : /config/config.xml은 "/config/config.xml"이되어야 함을 이해합니다. int를 "/target/audit-1.0.jar!/config/config.xml"로 변경하십시오. 그러나 "/target/config/config.xml"을 가리키고 싶습니다.

아이디어가 있습니까? 이것은 가능한가?

+0

* "jar 파일 외부에서 구성 파일을 읽을 수있는 jar 파일을 만들려고합니다."* Jar 파일에 포함시키지 않는 이유는 무엇입니까? –

+0

jar 파일을 다시 컴파일하지 않고 릴리스 한 후 프로그램의 구성을 편집 할 수 있기를 원합니다. –

+0

* "다시 컴파일하지 않고도"* 새 항아리를 만드는 것은 거기에 들어가는 코드를 다시 컴파일하는 것과 같은 것이 아니라는 점에 유의하십시오. OTOH 일반적으로 config와 같은 리소스를 넣을 것입니다. 자바 웹 스타트 (Java Web Start) (http://stackoverflow.com/tags/java-web-start/info)는 별도의 Jar로이 부분 만 업데이트 할 수 있습니다. –

답변

3
File base = new File(<Current class name here>.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParentFile(); 
File configFile= new File(base,"config.xml"); 
관련 문제