2014-04-04 2 views
1

두 개의 프로젝트 - foo 및 bar가 있습니다. Foo는 주요 프로젝트이며 바 프로젝트에 달려 있습니다. Foo는 또한 설정 파일 (conf.xml)을 보유하고있는 프로젝트이기도합니다. 이 프로젝트는 별도의 병으로 포장됩니다. Conf.xml는 foo.jar에에 포함되어 있으며 메인 클래스는 다음과 같이 그것을 액세스 :jar에서 구성 파일을 가져 와서 액세스 하시겠습니까?

MyApp.class.getClassLoader().getResource("conf.xml"); 

내가 명령 줄에 입력 한 다음를 실행하려면 :

java -cp "*" com.example.MyApp 

모든 것이 잘 작동합니다.

제 질문은 때로는 프로젝트를 다시 빌드하지 않고 conf.xml을 변경하려고합니다. 그래서 conf.xml을 jar 파일에서 가져 와서 직접 편집 할 수 있습니다. 그런 다음 문제는 항아리 안의 클래스가 conf.xml을 더 이상 찾을 수 없다는 것입니다. 내 수업에서 코드를 변경하지 않고도이 문제를 해결할 수 있습니까?

+1

거기에 봤어? http://stackoverflow.com/questions/2232602/java-jar-access-external-configuration-file?rq=1 – Trilarion

답변

0

두 포인터 :.

  1. 당신의 conf 파일을 클래스 패스에
  2. MyApp.class.getClassLoader를 사용해보십시오()의 getResource해야한다에있는 디렉토리 ("/ conf.xml");

"/"는 java가 classpath의 루트에 위치하도록 알려줍니다. 파일을 프로그램을 실행하고있는 디렉토리와 같은 디렉토리에 있다고 가정합니다.

+0

다른 방법으로 시도해 볼 수도 있습니다 : MyApp.class.getResourceAsStream – Anshuman

0

몇 가지 옵션이 있습니다.

당신은 구성 파일의 압축을 풉니 다 편집하고 다시 넣을 수 있습니다 :

# extract conf.xml from the jar 
jar xf path/to.jar conf.xml 

# edit the extracted conf.xml with your favorite editor 
# ... 

# put conf.xml back 
jar uf path/to.jar conf.xml 

또는 대신에 다시 넣어, 당신은 항아리에 다시 추가하지 않고 디렉토리에 유지하고, 컨테이너를 추가 할 수 있습니다 항아리 앞의 classpath 디렉토리 :

java -cp .:path/to.jar com.example.MyApp 
관련 문제