2017-04-20 6 views
8

はのは、私がMavenによって生成mywebapp.war経由で展開され、非常に一般的なWebアプリケーションを、持っているとしましょう:JARファイルを既存のwebappサブディレクトリにデプロイする方法は?

webapps 
    | 
    |--mywebapp.war 
    |--mywebapp 
     | 
     |--images 
     |--js 
     |--jsp 
     |--jardeploy 
     |--META-INF 
     |--styles 
     |--WEB-INF 

今、私はwebapps/mywebapp/jardeploymyjarfile1.jarmyjarfile2.jar(またはそれ以上)を展開したいと思います。彼らは戦争を起こすものではなく、別のMavenプロジェクトの成果物です。これらはまた、mywebappが使用するjarファイルではなく、WEB-INF/libの下にありますが、ダウンロード可能なjarファイルは別にビルドされ、mywebappソースコードの一部ではありません。

webappsに落ちたときに、デフォルトではないwebapps/jardeployではなくwebapps/mywebapp/jardeployをに展開しまいますMavenの中に二つ以上のjarファイルを束ねるアーカイブをパッケージ化する方法はありますか? jarファイルをコピーしてそのディレクトリにコピーしたのと同じですが、hackyの以前のアプローチではなく、webappsで生成された成果物を削除することで、標準のアプリケーションサーバーデプロイメントプロトコルに従いたいと考えています。私は実際にポストデプロイメントアドオンではなく正式なアーティファクト(戦争のようなもの)を望んでいます。 jarを解凍してそのディレクトリに置く必要がある(おそらくマニフェストの中に)そのディレクトリが存在するかどうかを伝える方法はありますか?

コンテナは問題ないはずが、それは私が何かが欠けていない限り、これは、Mavenの戦争 - プラグインと、余分なリソースのための標準的なユースケースのように見える

+0

「mywebapp」によって使用されない場合、パッケージ化する必要があるのはなぜですか?あなたが 'mywebapp'でそれらを使用するのであれば、なぜそれらを別のディレクトリに展開する必要がありますか? – ayip

+0

これは実際にmywebappから起動されたwebstartとして使用されています。しかし、ビルドプロセスは、Webアプリケーションを含むものとはまったく異なります。これはアプリ内のアプリです。 – amphibient

+0

たとえば、jarがサイト上の永続的なダウンロードリンクであった場合でも、バージョニングのために頻繁に再構築する必要があります(プロジェクト構造内の静的ファイルではない)。したがって、あなたのWebアプリケーションをビルドし、次にダウンロード可能な成果物を構築します(Webstartが本質的に+実行可能なものです)。 – amphibient

答えて

5

のTomcat 7です。 たとえば、here(see section Webリソースの設定)は、あなたの戦争ビルドに追加のリソースを含めることができることを示しています(追加リソース)。

これはあなたのためには機能しませんmaven-assembly-pluginではより柔軟なフォーマットを指定することができます。

+0

私はWARを考えていましたが、試してみるとweb.xmlを含む特定のディレクトリ構造が必要でした。持っていない。 – amphibient

+0

もしあなたがweb.xmlを持っていなければ、あなたはすでに "標準"の外にいます。したがって、私はアセンブリプラグインがここで最も柔軟性があると思います。 – Andrei

+0

そこにダミーのweb.xmlを置くことはできませんか?ちょうど戦争のプラグインを満たすために?私はあなたがパッケージからweb.xmlファイル自体を除外することができると思います。 – Andrei

1

jarファイルをmywebapp/jardeployディレクトリにコピーするWebListenerを使用してwebappを作成できます。したがって、このアプリケーションをコンテナに配置すると、JARを必要な場所にコピーします。

私はテストして動作します!あなたは、この新しいWebアプリケーションを作成しているとのsrc /メイン/ webappsに/瓶ディレクトリにjarファイルを入れていると仮定すると、WebListenerの外観はこれを好き:

@WebListener 
public class Deployer implements ServletContextListener { 

    public void contextInitialized(ServletContextEvent sce) { 
     String realPath = sce.getServletContext().getRealPath("/jars"); 
     try { 
      Files.copy(new File(realPath + "/myjarfile1.jar").toPath(), 
       new File(System.getProperty("catalina.base")+"/webapps/mywebapp/jardeploy/myjarfile1.jar").toPath()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void contextDestroyed(ServletContextEvent sce) { 
     System.out.println("On shutdown web app"); 
    } 
} 

このコードは概念だけの証拠であると向上させることができ、それはその目的のために働く。 1つのjar(myjarfile1.jar)を/webapps/mywebapp/jardeployにコピーするだけです。 PS:私はこの新しいwebappを、mavenのアーキタイプを使って作成しました。

関連する問題