2011-10-26 23 views
2

埋め込まれた.warファイルをTomcat 7埋め込みで作成した人はいますか? Mavenはそうです。Tomcatが埋め込まれた自己完結型warファイル?

私は「自己完結型」warファイルのようにコマンドラインでも使用できることを意味:それはのメインクラスを拾うべきで

をapplication.war -jar

のjava 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()メソッドを含むクラスです。すべてがその場所にあるように見えますが、私はまだ取得しています:WEB-INF/libに/ tomcatに-埋め込むコア-7.0.22.jarが含まれています

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は大丈夫のようですクラスがありません。

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 
+0

埋め込みWebサーバー/ Webサービスを提供したい場合は、jettyが最も簡単な方法です(http://jetty.codehaus.org/jetty/) – trojanfoe

+0

私は同意します。しかし、ライブラリの1つはJetty 7と8に対応していません。そのため、Tomcatを埋め込んでみました。どちらが直接働いたか(今日までは存在しなかったことは分かっていませんでした。) –

+0

瓶の中の瓶は可能ですか?瓶はサポートされていませんか? –

答えて

2

私は様々なライブラリを試しましたが、私は何もしたくないものを完全に作れませんでした。あなたは、戦争ファイルをそのまま維持するための巧妙なクラスローディングトリックを持っています。また、すべてのjarファイルを別々のファイルに展開し、すべてを実行可能なjarファイルに詰め込んだファイルがあります。

最初のカテゴリのうち、ウィンストンは私が見つけた最高のものでした。プラグインを追加して、再構築して実行してください。そして、実際には、何かが組み込みのWebコンテナに戦争を展開します。残念ながら、複雑なWebアプリケーションを実行するのには十分強力ではありません。

同じパスでファイルを含むジャーを解凍するときに、ファイルの競合が原因で2番目のカテゴリの解決策が除外されます。通常はMETA-INF/....そしてより正確にはSpring関連のメタデータです。 1つのファイルにまとめて結合する必要があります。それ以外の場合、アプリケーションは単に起動しません。

私は3番目の解決策を選択しました。実行可能なjarにwarファイルをそのまま含めてください。それが実行されると、warファイルを一時ディレクトリに抽出し、抽出されたwarファイルを使用して埋め込みWebコンテナ(私の場合はTomcat)を実行します。さらに、右のURLでブラウザを開きます。

実装が簡単で誰でも起動できます。 jarファイルをそのままにしておくことをお勧めしましたが、これはクラスの読み込みやjarファイルの爆発による問題を回避します。

関連する問題