JAR에 속성 파일을로드 하시겠습니까?
내 웹 앱이 의존하는 jar 중 하나가 jar 내에서 속성 파일을로드 할 때 문제가 있습니다. 다음은 항아리의 코드입니다.
static
{
Properties props = new Properties();
try
{
props.load(ClassLoader.getSystemResourceAsStream("someProps.properties"));
} catch (IOException e)
{
e.printStackTrace();
}
someProperty = props.getProperty("someKey");
}
속성 파일은 Maven 프로젝트의 "src / main / resources"디렉터리에 있습니다. Eclipse의 junit 테스트에서 코드를 실행하면 제대로 실행됩니다. 프로젝트가 Maven으로 jar에 빌드되고 내 웹 앱에 설치하고 널 속성 파일을 찾지 못합니다. 속성 파일이 jar에있는 기본 기본 파일에 해결하는 방법을 모르겠습니다.
문제는 getSystemResourceAsStream
. 간단히 getResourceAsStream
. 시스템 리소스는 시스템 클래스 로더에서로드되고, 이는 웹 애플리케이션으로 실행될 때 jar 가로 드되는 클래스 로더가 아닙니다.
애플리케이션을 시작할 때 시스템 클래스 로더가 클래스 경로의 일부로 jar로 구성되기 때문에 Eclipse에서 작동합니다. (예 : java -jar my.jar는 시스템 클래스 로더에 my.jar을로드합니다.)이 웹 응용 프로그램의 경우가 아닙니다. 응용 프로그램 서버는 복잡한 클래스로드를 사용하여 웹 응용 프로그램을 서로 격리하고 응용 프로그램 서버의 내부에서 격리합니다. 예를 들어 tomcat 클래스 로더 방법 및 사용 된 클래스 로더 계층 다이어그램을 참조하십시오.
편집 : 일반적으로 getClass().getResourceAsStream()
클래스 경로에서 리소스를 실행하기 위해 호출 하지만 정적 이니셜 라이저에서 리소스를 가져 오는 것은로드하려는 클래스에서 로더에있는 클래스의 이름을 명시 적으로 지정해야합니다. 가장 간단한 방법은 정적 이니셜 라이저를 포함하는 클래스를 사용하는 것입니다.
[public] class MyClass {
static
{
...
props.load(MyClass.class.getResourceAsStream("/someProps.properties"));
}
}
레코드의 경우 JAR에 리소스를 추가 비용으로 설치해야합니까? (단위 테스트 용으로 설명되어 "일반"리소스에도 동일하게 적용됨) :
단위 테스트를 위해 클래스 경로에 리소스를 추가 비용 리소스를 배치하는 디렉토리를 제외하고 JAR에 리소스를 추가 할 때와 동일한 패턴을 추가
${basedir}/src/test/resources
합니다. 이 시점에서 다음과 같은 프로젝트 디렉토리 구조를 사용합니다.my-app |-- pom.xml `-- src |-- main | |-- java | | `-- com | | `-- mycompany | | `-- app | | `-- App.java | `-- resources | `-- META-INF | |-- application.properties `-- test |-- java | `-- com | `-- mycompany | `-- app | `-- AppTest.java `-- resources `-- test.properties
단위 테스트에서 다음과 같은 간단한 코드 스 니펫을 사용하여 테스트에 필요한 리소스에 액세스 할 수 있습니다.
... // Retrieve resource InputStream is = getClass().getResourceAsStream("/test.properties" ); // Do something with the resource ...
참고 URL : https://stackoverflow.com/questions/2815404/load-properties-file-in-jar
'ProgramingTip' 카테고리의 다른 글
Jira 프로젝트에서 구성 요소를 사용하는 모범 사례 (0) | 2020.12.12 |
---|---|
외부 루프의 루프 고급 가져 오기 (0) | 2020.12.12 |
C #에서 할당 연산자 오버로딩 (0) | 2020.12.12 |
무게를 제외하고 동일한 글꼴이 다른 브라우저에서 다르게 글꼴입니다. (0) | 2020.12.12 |
ASP.NET에 두 가지 호환되지 않는 세션 상태 유형이있는 이유는 무엇입니까? (0) | 2020.12.12 |