2014-05-21 3 views
2

이것은 내가 무엇을 시도했다입니다 : Maven을 사용할 때 리소스 경로를 얻으려면 어떻게해야합니까?

String myPath = myStaticClass.class.getResource("en-us").getPath(); 
// returns C:/Users/Charles/Workspace/ProjectName/target/classes/ 

내 자원

왜 이런 일

사람이 알고 있나요 C:/Users/Charles/Workspace/ProjectName/src/main/resources에?

편집 : 나는 경로가 자원을로드 할 라이브러리에 사용되는,하지만 실패 언급해야 가정
.

+2

디자인에 의한 것 같습니다. 여기서 정확히 해결해야 할 문제는 무엇입니까? –

+0

죄송합니다. 말씀 드렸어야 할 것 같습니다. 내 프로그램이 그 경로를 줄 때 내 리소스를로드하지 못하고 있습니다. –

답변

3

여기에서 maven을 사용하여 프로젝트를 빌드 할 때 컴파일 된 코드가 저장됩니다. 빌드 프로세스의 일부로 리소스가 target/classes 폴더에 복사됩니다.

그런 다음 응용 프로그램을 다른 위치에 배포하면 코드에서 자원에 대한 새 경로를 반환합니다.

편집 귀하의 코멘트 당으로, 자원을로드하려면 다음을 사용하십시오 :

InputStream resourceStream = myStaticClass.class.getClassLoader().getResourceAsStream("en-us"); 

이 찾아 자원을 InputStream를 제공하기 위해 현재의 클래스의 클래스 로더를 사용합니다.

2

mvn compile을 실행하면 리소스 디렉토리를 target/classes 디렉토리로 복사하는 것이 좋습니다. 이제 보통 myStaticClass.class.getResource을 호출하면 전달하는 경로의 대상/클래스가 루트가됩니다. src/main/resources/my.file.txt에 파일이 있다고 가정 해 보겠습니다. myStaticClass.class.getResource("/my.file.txt");

잊고있는 것은 "/"입니다. 그것이 없으면 "/", 그것은 당신의 클래스의 디렉토리에 상대적으로 보일 것입니다.

또는 다음을 수행 할 수 있습니다. ClassLoader.getSystemClassLoader().getResource("my.file.txt").getPath(). 슬래시가 없음을 확인하십시오.

0

왜 이런 일이 벌어지고 있는지 묻고 있으며 리소스를로드하려고합니다.

"이유": 다른 게시물을 참조하십시오. 여기에 복사 할 이유가 없습니다.

"방법": 다음 코드는 리소스를로드하는 방법을 보여줍니다. 파일이 "your.resources"라는 파일에 있고이 파일이 클래스 경로에 있다고 가정합니다. 귀하의 게시물에 따르면, 그것은 있습니다.

import java.io.IOException; 
import java.util.Properties; 

public class Test { 

    public Test() throws IOException 
    { 
     final Properties properties = new Properties(); 
     properties.load(this.getClass().getResourceAsStream("your.resources")); 
     System.out.println(properties); 
    } 
    public static void main(String[] args) throws IOException { 
     new Test(); 
    } 
} 

리소스의 전체 경로를 제공 할 필요가 없습니다. 그들이 classpath에있는 한, 이것은 그들을 찾을 것입니다.

관련 문제