2016-10-26 25 views
0

プロジェクト構造用のwarファイルをビルドするためにmavenプラグインを使用しました。そして今、私はこのwarファイルを実行すると、私は戦争のファイルをチェックインするとき、私のメインクラスがWEB-INF/classes/com/abc/HelloWorld/WARファイルの実行中にエラーが発生しました

下で発生なっているいくつかの理由で、エラー

Error: Could not find or load main class com.abc.HelloWorld.App 

を取得し、私は試してみましたにクラスパスを追加しましたManifest.MFファイルですが、それは役に立ちませんでした。

ここにwarファイルを作成するための私のmavenプラグインがあります。また、このプロジェクトには埋め込み式桟橋サーバーが含まれています。

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
    <webXml>WebContent\WEB-INF\web.xml</webXml> 
    <warName>${project.artifactId}-${project.version}</warName>    
    <archive> 
     <manifest> 
     <addClasspath>true</addClasspath> 
     <mainClass>com.infor.HelloWorld.App</mainClass> 
     </manifest> 
    </archive> 
    <overlays> 
    <overlay> 
    <id>com.abc.HelloWorld</id>  
    <type>jar</type> 
    </overlay> 
    </overlays> 
    </configuration> 
    <executions> 
    <execution> 
     <id>default-war</id> 
     <phase>package</phase> 
     <goals> 
     <goal>war</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

私はthis questionを試しましたが、それは助けになりませんでした。

答えて

1

WebApp WARファイルは、Webコンテナを配布するためにパッケージ化された特殊なjarファイルです。

自己実行型のwarファイルを作成できますが、META-INF/MANIFEST.MFおよびそのMain-ClassがJettyをインスタンス化し、Webアプリケーション自体をそのServerインスタンスにロードできるように、JARの動作がオーバーレイされたWARファイルを作成する必要があります。 。

次のJettyプロジェクトのプロジェクトをご覧ください。

https://github.com/jetty-project/embedded-jetty-live-war

ときには注意することが重要です。

  • は、Webアプリケーションの展開がサーバーのクラスパスとWebアプリケーションのクラスパス間のクラスの重複を(失敗しないためにWARファイルにサーバ・クラスをマージします)。これは、この起動時のサーバーの部品を置くことによって達成することができる - (!彼らは敏感な何かをダウンロードさせない)、自己実行可能なHTTPクライアントへのServer側のあまりを露出しないMETA-INF/services/ファイル
  • をマージ
  • あなたはWebアプリケーション(WAR)スタートアップの歩行を持ちたいとサーバコンポーネントを知ることはありません/WEB-INF/ディレクトリ
  • (これは一度サーバークラスローダで、二重の初期化を引き起こし、そして再びWebアプリケーションクラスローダで可能)

このプロジェクトに記載されているとおり:

このプロジェクトは、自己実行WARファイルの観点からEmbedded Jettyの使用を調査するためのベースラインを提供する必要があります。

プロジェクトは4つの主要部分があり:

  • /thewebapp/を - それは通常のMaven <packaging>war</packaging>だけWARファイルで生成アーティファクトと、そのネイティブ形式で存在するように、これは、WARファイル、Webアプリケーションでありますそれは(まだ)自己実行ではありません。
  • /theserver/ - これはJettyサーバーとWebAppを初期化するためにカスタマイズする組み込みJettyサーバーjetty.livewar.ServerMain.main(String args[])です。このプロジェクトは、JDBCサーバーライブラリ、JNDI、ログなどのカスタマイズを行う場所でもあります。このプロジェクトは、サーバーを実行するために必要なすべての依存関係を持つuber-jarを生成します。ファイルMETA-INF/services/をマージするには、maven-shade-pluginで特別な注意が必要です。
  • /server-bootstrap/ - ライブWARのコンテンツからLiveWarClassLoaderを設定し、この新しいClassLoaderからjetty.livewar.ServerMain.main(String args[])を実行する2つの小さなクラスが含まれています。このプロジェクトには、ライブWARに必要なライブMETA-INF/MANIFEST.MFも含まれています。
  • /livewar-assembly/ - これは、上記3つのプロジェクトをLive/Executable WARファイルに結びつけるプロジェクトです。上記の3つのプロジェクトからの成果物は、maven-assembly-pluginによって解凍され、最も機能的(安全)な場所に配置されます。たとえば、/theserver/のサーバークラスは/WEB-INF/jetty-server/に置かれ、WARファイルにアクセスするWebクライアントからはアクセスできなくなります。

注:この設定を使用する場合は、これらのファイルは、静的なコンテンツとしてWebクライアントでダウンロードすることができるようあなたは、知っておくべき新しい組み立てWARファイルに存在する3つのファイルがあります。

  • /jetty/bootstrap/JettyBootstrap.class
  • /jetty/bootstrap/LiveWarClassLoader.class
  • /META-INF/MANIFEST.MF

サンプルプロジェクトでは、これらのブートストラップファイルに存在する情報は、お使いのサーバーやその業務に関するプライベート情報や機密情報を明らかにはならないような方法で設定され。単にWebappをLive/Executable WARファイルとして起動することができます。

関連する問題