Maven 프로젝트에서 구성 파일 위치를 선택해야합니다.
-
09-12-2019 - |
문제
일부 구성 파일에 의존하는 명령 줄 도구를 작성하고 있습니다.
개발 중에는 src/main/resources
에서 해당 파일을 넣고 getClass().getResourceAsStream("/config-file-name")
가 잘 작동합니다.
Maven-Assembly-Plugin을 선택하여 모든 종속성으로 JAR을 빌드합니다.
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.myproject.Scheduler</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-my-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
.
구성 파일은 모두 JAR에 싸여 있지만, 나는 이들을 분리하고 싶습니다.
그래서, i 다음 config, 를 추가합니다.
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>conf.properties</include>
</includes>
<filtering>true</filtering>
<excludes>
<exclude></exclude>
</excludes>
<targetPath>..</targetPath>
</resource>
</resources>
.
이 작업을 수행 한 후 구성 파일은 JAR에 래핑 된 대신 JAR과 옆에 있습니다.
그러나 내 코드는 지금 파일에 액세스 할 수 없습니다.
코드에서 파일에 액세스하는 방법을 변경해야합니까?
또는 그 파일을 src/main/resources/
, 모든 대안에 넣지 않아야합니까?
누군가가 알고 있으면 도움을주십시오.
감사합니다.
업데이트 : 마지막으로 Maven 리소스 파일을 사용하는 것입니다. 대신 기본적으로 JAR과 동일한 경로로 파일 경로를 설정하면 Eclipse가 불평하는 것을 제외하고 모든 것이 잘 작동합니다.
jar에서 구성 파일을 이동하고 대상 / 클래스 폴더에 있기를 원하지 않으므로 <targetPath>..</targetPath>
를 사용하여 구성 파일을 JAR 파일과 동일한 디렉토리로 이동하십시오.
Eclipse 프로젝트 설정을 다시 생성 할 때 Eclipse는 다음과 같이 출력 폴더 "프로젝트 / 대상"내부에서 출력 폴더 "프로젝트 / 대상 / 테스트 클래스"를 중첩 할 수 없습니다.
아무도 나를 도와줍니다?
해결책 3
마침내 MAVEN 리소스 파일을 사용하여 파일 경로를 기본적으로 JAR과 동일한 경로로 설정하면 Eclipse가 불평하는 것을 제외하고 모든 것이 잘 작동합니다.
(구성 파일을 JAR에서 꺼내려고하고 싶지 않으므로 대상 / 클래스 폴더에 있으려면 구성 파일을 JAR 파일과 동일한 디렉토리로 이동시킬 수 있습니다. 내가Eclipse 프로젝트 설정을 다시 생성하십시오. Eclipse는 출력 폴더 "프로젝트 / 대상"내부에서 출력 폴더 "프로젝트 / 대상 / 테스트 클래스"를 중첩 할 수 없습니다.)
지금까지 해결책을 찾지 못했습니다. 이클립스 버그가 보입니다.
이제는 일식을 포기하고 Intellij 아이디어로 바뀌 었습니다. 특히 Maven과 완벽하게 통합 된 꽤 좋은 IDE입니다.Maven 프로젝트에 이클립스를 사용할 수있는 기회를 피할 수 있습니다.
다른 팁
응용 프로그램은 더 이상 클래스 경로가 아닌 구성 파일에 액세스 할 수 없습니다.
구성 파일을 나머지 응용 프로그램에서 분리하려면 어셈블리 형식 .배포 및 사용에 문제가 있지만 항아리와 함께 종속성 대신 빈 넣기를 사용할 수 있습니다.
속성 파일이 얼마나 복잡한지에 따라 자원 플러그인 필터 기능을 사용하여 Maven 프로파일을 기반으로 값을 변경할 수 있습니다.예를 들어, Dev 및 Production Profile을 정의 할 수있는 위치라는 속성을 갖고 싶다면 POM (또는 Maven 2에있는 경우 Profiles.xml)의 Maven 속성으로 값을 설정하십시오. 그런 다음 속성 파일에서 다음을 수행 할 수 있습니다.
location=${my.location}
.
와 같이 POM에서 필터링을 설정했는지 확인하십시오.
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
.
빌드 할 때 대상 디렉토리를보고 해당 속성 파일을 봅니다. 에 대체 된 올바른 값을 볼 수 있습니다.