2015-01-29 2 views
3

나는 axis2 종속성을 가진 스프링 부트 jar를 실행하려고합니다. 항아리 (의존성 포함)를 빌드하기 위해 스프링 부트 메이븐 플러그인을 사용하고 있습니다. 내 항아리를 실행하려고하면 콘솔에서 다음 예외가 발생합니다.아파치 축이있는 스프링 부팅 응용 프로그램

org.apache.axis2.AxisFault: The G:application\myapp\target\myapp.jar!\lib\axis2-1.6.1.jar file cannot be found. 
at org.apache.axis2.deployment.repository.util.DeploymentFileData.setClassLoader(DeploymentFileData.java:111) 
at org.apache.axis2.deployment.ModuleDeployer.deploy(ModuleDeployer.java:70) 
at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136) 
at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:813) 
at org.apache.axis2.deployment.RepositoryListener.loadClassPathModules(RepositoryListener.java:222) 
at org.apache.axis2.deployment.RepositoryListener.init2(RepositoryListener.java:71) 
at org.apache.axis2.deployment.RepositoryListener.<init>(RepositoryListener.java:64) 
at org.apache.axis2.deployment.DeploymentEngine.loadFromClassPath(DeploymentEngine.java:175) 
at org.apache.axis2.deployment.FileSystemConfigurator.getAxisConfiguration(FileSystemConfigurator.java:135) 
at ... 

그런 다음 내 병 구조를 검사했습니다. lib 폴더 안에 모든 jar 파일 (위에서 언급 한 jar 파일 포함)이 들어 있습니다. 첨부 된 lib 폴더 enter image description here의 스크린 샷입니다. 다음은 내가 시도한 솔루션입니다.

  1. 응용 프로그램 jar와 같은 디렉토리에 배치 된 축 jar.
  2. 응용 프로그램 jar와 동일한 디렉토리에 lib 폴더를 만들고 그 안에 jar 파일을 배치했습니다.
  3. 수정 된 매니페스트 파일은 클래스 경로를 포함하도록 :/lib 디렉토리/솔루션의

아무도이 일을하지 않았다. 그러나, 내가 이클립스에서 응용 프로그램 클래스를 실행하면 응용 프로그램이 시작되고 완벽하게 실행됩니다. 하지만 일단 항아리를 만들면 아무것도 실행되지 않는 것처럼 보입니다.

아무도 도와 줄 수 있습니까? 미리 감사드립니다.

+0

spring-boot-loader 모듈을 사용하면 응용 프로그램에서 중첩 된 jars 클래스를로드 할 수 있습니다.이 클래스는 매우 멋지지만 axis2가 jar 파일을 '배포'하려고 시도하는 것 같아요. 그게 무슨 뜻인지 잘 모르겠습니다. 그것을 찾지 마라. jar를 외부에 제공해야 할 수도 있습니다 – MarianP

+0

Jar를 수동으로 제공하는 방법은 무엇입니까? 이미 클래스 패스에 포함 시키려고했지만 작동하지 않았습니다. ( –

+0

war 파일로 패키지하고 외부 바람둥이에 배포 할 수 있습니까? – MarianP

답변

8

Axis는 다른 병 안에 중첩 된 병에서 실행되는 것처럼 대처할 수 없습니다. Axis jar 파일은 스프링 부트 애플리케이션의 jar 파일 안에 중첩되지 않고 파일 시스템에서 직접 사용할 수 있기 때문에 이클립스에서 잘 동작한다.

응용 프로그램의 fat jar 파일을 구성하여 Spring 시동시 Axis jar 파일을 실행할 때 임시 위치에 압축을 푸는 것을 인식 할 수 있습니다.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <configuration> 
       <requiresUnpack> 
        <dependency> 
         <groupId>org.apache.axis2</groupId> 
         <artifactId>axis2</artifactId> 
        </dependency> 
       </requiresUnpack> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

을 그리고 당신은 Gradle을를 사용하는 경우 : 당신은 메이븐을 사용하는 경우

springBoot { 
    requiresUnpack = ['org.apache.axis2:axis2'] 
} 

몇 가지 더 자세한 사항은 Spring Boot documentation를 참조하십시오.

+0

답변을 주셔서 감사합니다. 내가 이러한 변경을 한 후에는 효과적이었습니다. 생성 된 예외는 유익하지 않았으며, 따라서 이와 같은 사실을 알지 못했습니다. 아파치조차도 항아리 내부에서 축을 실행할 수 없다고 말하지 않습니다. (왜 그럴까요?) 또는 maven shade plugin w를 사용하여 작동하도록했습니다. 이 이유를 알지 못하면서 (음영 플러그인이 모든 항아리를 클래스로 추출하기 때문에 작동한다고 생각합니다). 어쨌든, 다시 해답을 주셔서 감사합니다. –