2015-01-29 4 views
3

Я пытаюсь запустить весеннюю загрузочную банку, которая имеет в ней зависимости от оси. Я использую плагин spring boot maven для создания банки (с зависимостями). Когда я пытаюсь запустить мою баночку, я получаю следующее исключение в моей консоли:Приложение для загрузки Spring с осью apache

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, содержащая все банки (включая вышеупомянутую овальную банку). Приложен снимок экрана папки lib enter image description here. Ниже перечислены решения, которые я пробовал:

  1. Размещенный осевой барабан в той же директории, что и приложу банку.
  2. Создана папка lib в том же каталоге, что и приложение, и помещена в нее.
  3. Модифицированный файл манифеста включать Class-Path:/Библиотека/

Ни одно из решений не работал. Однако, когда я запускаю класс приложения в eclipse, приложение запускается и работает отлично. Но, как только я создаю банку, ничего не работает.

Может ли кто-нибудь помочь? Заранее спасибо.

+0

Модули весна-загрузчик-загрузчик позволяют приложениям загружать классы из вложенных банок, что очень круто, но кажется, что ось2 пытается «развернуть» банку самостоятельно, я не уверен, что это значит, t найти его. вам может потребоваться предоставить банку извне – MarianP

+0

Как обеспечить банку вручную? Я уже пробовал включить его в classpath, но это не сработало :( –

+0

вы можете упаковать его в качестве военного файла и развернуть его на внешнем tomcat? – MarianP

ответ

8

Похоже, что ось не может справиться с запуском из банки, вложенной в другую банку. Он отлично работает в Eclipse, поскольку баннер Axis доступен непосредственно в файловой системе, а не вложен в файл jar-файла приложения Spring Boot.

Вы можете настроить файл жира в вашем приложении, чтобы Spring Boot знал, чтобы распаковать банку Axis во временное место при ее запуске. Если вы используете Maven:

<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

Спасибо за тонну за ответ. Он работал, как только я сделал эти изменения. Сгенерированное исключение не было информативным, и, следовательно, я никогда не знал, что это может быть причиной этого. Даже apache не заявляет, что вы не можете выполнить ось изнутри банки (но зачем они?). В качестве альтернативы мне удалось заставить ее работать, используя плагин maven shade w не зная этой причины (я думаю, что плагин тени работает, потому что он извлекает все банки в классы). Во всяком случае, еще раз спасибо за ответ. –