2016-08-11 2 views
1

spring-boot maven 플러그인을 통해 실행 가능한 jar를 빌드하고 있습니다. xml 파일을 런타임에 올바르게 읽을 수 있도록 종속 항아리 중 하나를 압축 해제해야합니다. 나는 libs 압축 풀기에 관한 문서를 따라 갔다. 나는 항아리의 내용을 확인하고 포장을 해체 정보가 항아리에 인코딩 된 것을 확인스프링 부트 requiresUnpack은 런타임에 채워지지 않습니다.

 <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <requiresUnpack> 
        <dependency> 
         <groupId>com.deep6analytics.pipeline</groupId> 
         <artifactId>pipeline-services-ctakes</artifactId> 
        </dependency> 
       </requiresUnpack> 
      </configuration> 
     </plugin> 
    </plugins> 

:

$ zipnote target/pipeline-apps-annotation-server-1.0-SNAPSHOT.jar | grep -C 1 UNPACK 
@ BOOT-INF/lib/pipeline-services-ctakes-1.0-SNAPSHOT.jar 
UNPACK:1e6eda0ca9f1b740c4aba6058cac74a5084f1706 
@ (comment above this line) 

이 문서에 따르면, 런타임에, 내가 예상 다음과 같이 내 플러그인 설정입니다 내 $ TMPDIR 내에서 "스프링 부팅 libs와"디렉토리를 볼 수 있습니다 :

가 <의 groupId 01,235,831,177와 < 종속 > 각 라이브러리를 지정및 <artifactId>이며 런타임시 $ TMPDIR/spring-boot-libs에 압축이 풀립니다.

그러나 응용 프로그램을 실행할 때 $ TMPDIR을 확인하고 압축을 푼 디렉토리가 보이지 않습니다. 결과적으로, 내 응용 프로그램을 시작할 수 없습니다 :

ls -la $TMPDIR 

drwxr-xr-x 3 staff  102 Aug 10 23:40 pipeline-apps-annotation-server-1.0-SNAPSHOT.jar-spring-boot-libs-96fe7360-b23b-4caa-a2ce-75aa0300a417 
drwxr-xr-x 3 staff  102 Aug 10 23:27 pipeline-apps-annotation-server-1.0-SNAPSHOT.jar-spring-boot-libs-a06a2373-0694-42e9-bee1-29191b3b764a 
drwxr-xr-x 4 staff  136 Aug 10 20:54 sp_update 
drwx------ 2 staff  68 Aug 10 11:30 ssh-azEJDYkZH6ho 
drwxr-xr-x 3 staff  102 Aug 10 15:05 tomcat.104726406473930572.8085 
drwxr-xr-x 3 staff  102 Aug 10 23:38 tomcat.1527552147767629466.8080 
drwxr-xr-x 3 staff  102 Aug 10 23:13 tomcat.1546871599966723864.8080 

사람이 내가 잘못, 또는 내가 뭔가를 오해하고 무엇을 볼 수 있습니까?

답변

2

문서에 약간의 혼란이 있습니다. 압축을 푼 디렉토리가 있습니다 :

drwxr-xr-x 3 staff  102 Aug 10 23:40 pipeline-apps-annotation-server-1.0-SNAPSHOT.jar-spring-boot-libs-96fe7360-b23b-4caa-a2ce-75aa0300a417 
drwxr-xr-x 3 staff  102 Aug 10 23:27 pipeline-apps-annotation-server-1.0-SNAPSHOT.jar-spring-boot-libs-a06a2373-0694-42e9-bee1-29191b3b764a 

그 디렉토리가 당신이 당신의 실행 항아리에서 압축을 풀 필요로 표시 한 항아리 파일을 포함해야합니다.

an issue을 열어 설명서를 수정했습니다.

+1

Ok - 항아리가 "폭발"되어 항아리 내의 각 리소스가 디스크의 파일로 존재할 것이라고 생각했습니다. 따라서 "언 패킹"이 실제로 수반하는 것에 대한 명확성이 도움이 될 것입니다. jar 파일을 직접 읽을 수 있도록 파일 시스템에 jar 파일의 리소스를 추출하려면 어떻게해야합니까? –

+1

왜 그렇게하고 싶은지 모르겠지만 ClassLoader.getResourceAsStream()을 통해 리소스에 액세스 한 다음 파일에 쓸 수 있습니다. 그래도 중간 언 패킹 단계를 거치지 않고도이 작업을 수행 할 수 있습니다. –

+1

불행히도 중첩 된 XML 문서를 통해 반복되는 인프라를 사용하고 있습니다. 포함 된 모든 문서가 파일 시스템에 있다고 가정합니다. 그래서 그 사실을 바꾸기 위해 내가 할 수있는 일은 없습니다. 그래서이 파일을 jar 파일에서 가져 와서 파일 시스템에 저장해야합니다. –

관련 문제