Автономный файл войны со встроенным Tomcat? - PullRequest
2 голосов
/ 26 октября 2011

Есть ли кто-нибудь, кому удалось создать автономный файл .war, используя встроенный Tomcat 7?С Maven это.

Я имею в виду «автономный», что файл war также может быть использован в командной строке как:

java -jar application.war

С помощью которого он должен взять главный класс META-INF / MANIFEST.MF и запустить приложение с прилагаемым встроенным Tomcat 7.

Мне удалось заставить его работать как таковой, но я не могу показатьсячтобы иметь возможность упаковать его в файл .war, который делает то же самое.

У кого-нибудь есть ссылка на документацию некоторых видов?

TIA !!!

Ян

Добавление выдержки из файла pom.xml:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
    <configuration>
      <failOnMissingWebXml>false</failOnMissingWebXml>
      <archive>
        <manifest>
          <mainClass>EmbeddedMain</mainClass>
          <addClasspath>true</addClasspath>
          <classpathPrefix>WEB-INF/lib/</classpathPrefix>
        </manifest>
      </archive>
      <webResources>
        <resource>
          <directory>target/classes</directory>
        </resource>
      </webResources>
    </configuration>
  </plugin>

Где "EmbeddedMain" - это класс, содержащий метод main ().И хотя все, кажется, на своем месте, я все еще получаю:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/catalina/LifecycleListener
Caused by: java.lang.ClassNotFoundException: org.apache.catalina.LifecycleListener
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: EmbeddedMain. Program will exit.

MANIFEST.MF, кажется, в порядке: WEB-INF / lib / tomcat-embed-core-7.0.22.jarсодержит отсутствующий класс.

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: jan
Build-Jdk: 1.6.0_29
Main-Class: EmbeddedMain
Class-Path: WEB-INF/lib/spring-web-3.0.6.RELEASE.jar WEB-INF/lib/aopal
 liance-1.0.jar WEB-INF/lib/spring-beans-3.0.6.RELEASE.jar WEB-INF/lib
 /spring-core-3.0.6.RELEASE.jar WEB-INF/lib/jwt-3.1.11.jar WEB-INF/lib
 /commons-fileupload-1.2.1.jar WEB-INF/lib/commons-io-1.4.jar WEB-INF/
 lib/next-persistence-0.0.3.jar WEB-INF/lib/hibernate-entitymanager-3.
 6.7.Final.jar WEB-INF/lib/hibernate-core-3.6.7.Final.jar WEB-INF/lib/
 antlr-2.7.6.jar WEB-INF/lib/dom4j-1.6.1.jar WEB-INF/lib/hibernate-com
 mons-annotations-3.2.0.Final.jar WEB-INF/lib/jta-1.1.jar WEB-INF/lib/
 cglib-2.2.jar WEB-INF/lib/javassist-3.12.0.GA.jar WEB-INF/lib/hiberna
 te-jpa-2.0-api-1.0.1.Final.jar WEB-INF/lib/kryo-1.04.jar WEB-INF/lib/
 asm-3.2.jar WEB-INF/lib/reflectasm-1.01.jar WEB-INF/lib/minlog-1.2.ja
 r WEB-INF/lib/annotations-1.3.9.jar WEB-INF/lib/tomcat-embed-core-7.0
 .22.jar WEB-INF/lib/tomcat-embed-jasper-7.0.22.jar WEB-INF/lib/tomcat
 -embed-logging-juli-7.0.22.jar WEB-INF/lib/derby-10.8.1.2.jar WEB-INF
 /lib/spring-context-3.0.6.RELEASE.jar WEB-INF/lib/spring-aop-3.0.6.RE
 LEASE.jar WEB-INF/lib/spring-expression-3.0.6.RELEASE.jar WEB-INF/lib
 /spring-asm-3.0.6.RELEASE.jar WEB-INF/lib/spring-orm-3.0.6.RELEASE.ja
 r WEB-INF/lib/spring-jdbc-3.0.6.RELEASE.jar WEB-INF/lib/spring-tx-3.0
 .6.RELEASE.jar WEB-INF/lib/commons-lang-2.5.jar WEB-INF/lib/slf4j-api
 -1.6.3.jar WEB-INF/lib/slf4j-log4j12-1.6.3.jar WEB-INF/lib/log4j-1.2.
 14.jar WEB-INF/lib/jcl-over-slf4j-1.6.3.jar WEB-INF/lib/commons-loggi
 ng-1.1.jar WEB-INF/lib/commons-collections-3.2.jar

1 Ответ

2 голосов
/ 27 октября 2011

Я пробовал разные библиотеки, но я не мог заставить ни одну из них полностью работать в соответствии с тем, что я хочу сделать.У вас есть те, которые делают хитрые трюки с загрузкой классов, чтобы сохранить файл войны как есть.И у вас есть такие, которые разбивают все банки в отдельные файлы и втискивают все в исполняемый файл.

Из первой категории, которую я обнаружил, Winstone был лучшим, что я мог найти.Просто добавьте плагин, перестройте и запустите.И действительно, что-то разворачивает войну во встроенный веб-контейнер.К сожалению, этого недостаточно для запуска сложного веб-приложения.

Я исключаю решения второй категории из-за конфликтов файлов при распаковке файлов, содержащих файлы по тому же пути.Обычно META-INF / .... А точнее метаданные, связанные с Spring.Который должен быть объединен в один файл.В противном случае приложение просто не запустится.

Я выбрал третий вид решения: должен ли исполняемый файл jar содержать файл war как таковой.Когда он запускается, он извлекает файл war во временный каталог и запускает встроенный веб-контейнер (в моем случае Tomcat), используя только что извлеченный файл war.Кроме того, открыв браузер по правому адресу.

Его легко реализовать, и любой может его запустить.Хотя я бы предпочел сохранить файл JAR как таковой, это позволит избежать каких-либо осложнений из-за загрузки классов или столкновения файлов JAR с разнесенными частями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...