4

.war ファイルを生成する Maven プロジェクトがあります。

サーブレット コンテナー (jetty、tomcat など) と war アプリケーションを埋め込んだ実行可能 jar を生成するように maven を構成し、次のようなコマンドで Web アプリケーションを実行できる実行可能 jar を生成したいと考えています。

java -jar mywebapp.war

そのようなアーティファクトを取得する Maven プラグインはありますか?

現時点では、jetty-runnerを使用してアプリのテスト バージョンを実行しています。テストには非常に満足していますが、再配布には実行可能な戦争ほど便利ではありません (jenkins のように)。

アップデート

@ jesse-mcconnell: 結果を得るために、Web アプリケーション (pom.xml を除く) の 1 行も変更したくありません。私の戦争を別の方法でパッケージ化し、選択したアプリサーバーの下で展開できるようにし、さらに実行可能な戦争として実行できるようにするだけです。

完璧なソリューションは、実行可能な war 自体に含まれるすべての必要な構成ファイルを指定して、組み込むアプリケーションサーバーを選択する機能も提供する必要があります。

@khmarbaise:私はジェンキンスについて知っています、私はすでにコードをずっと前にチェックしました、それはwinstoneサーブレットコンテナを使用しています、そしてそれはhttpからアクセスできる戦争にMain.classを入れます(そして私はそれが間違っていると思います)

完璧な解決策は、次のようなものを含む戦争を生成する可能性があります:

├── META-INF 
│   └── MANIFEST.MF (Main-Class: WEB-INF.container.classes.Main)
└── WEB-INF
    ├── web.xml
    ├── classes
    ├── lib
    └── container
        ├── lib (jetty.jar/tomcat.jar/whatever.jar)
        ├── etc (configuration files for the container)
        └── classes
            └── Main.class 
  1. Main.class は etc 構成をデフォルトとして使用する必要がありますが、コマンド ライン (ポート、コンテキストなど) で共通パラメーターをオーバーライドしたり、新しい構成を指定したりできます。
  2. Main.class は、コンテナー内からコンテナー jar と構成をロード (または tmp.dir に抽出) し、appserver を起動できる必要があります。

これが私がそれを作る方法です。

最後に、自己完結型の方法で実行する機能を備えた、任意のアプリケーションサーバーにデプロイできる通常の戦争があります。

4

3 に答える 3

4

Tomcat Maven プラグインはこちらをご覧くださいhttp://tomcat.apache.org/maven-plugin-2.0/executable-war-jar.html

HTH

于 2013-01-07T14:18:38.743 に答える
3

maven jarプラグインを使用して、マニフェストにMain-Classを設定してから、これに類似した(またはこのようなコードを呼び出す)mainメソッドを記述します。

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/OneServletContext.java? h = jetty-8

サーブレットを登録し、それに応じてWebアプリケーションを接続できます。

jarファイル内に適切なwarファイルをバンドルする際の問題は、一般的なことではなく、jar内からのwarファイルのデプロイを理解する専用のデプロイヤーが必要になることです。したがって、uberタイプのjarを作成するのがおそらくより良い方法です。さらに、実際のWebAppContextの大きな理由の1つは、これらの場合にはやや意味のないクラスローダーの分離です。

maven-dependency-pluginを使用して、必要なさまざまな依存関係を解凍できます。maven-uberjar-plugin(名前だったと思います)のように使用できるプラグインは他にもありますが、maven-dependency-plugin+上記のようなカスタムメインクラスを使用して簡単に実行できます。

私はこのアプローチが好きです。それは、アプリケーション全体を起動し、すべてをデバッグできるようにするeclipseで実行できるメインのメソッドになり、多くの場合、かなりの成功を収めることができるからです。

編集:後世のために、jettyはjetty-runnerと呼ばれるアーティファクトもリリースします。これにより、コマンドラインから直接warファイルを実行できます。

于 2013-01-06T16:17:15.567 に答える
2

いいえ、わかりませんが、期待どおりにコマンドから直接起動することをサポートするjenkinsソースコードを確認してください。

于 2013-01-06T16:05:28.900 に答える