문제

일부 구성 파일에 의존하는 명령 줄 도구를 작성하고 있습니다.

개발 중에는 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>
.

빌드 할 때 대상 디렉토리를보고 해당 속성 파일을 봅니다. 에 대체 된 올바른 값을 볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top