2013-06-18 14 views
5

オリジナルの投稿:
Jetty 8.1サーブレットコンテナ上で実行されているJava 6 Webアプリケーションのデプロイメント記述子を、web.xmlにフィルタリングしたいが、これまで動作していない。私は、アクティブなmavenのプロファイルに応じて、異なるJSFプロジェクトの段階を設定したい:jetty-maven-pluginを使用している場合、web.xmlをフィルタリングしていますか?

<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>${jsfProjectStage}</param-value> 
</context-param> 

pom.xml内のプロファイルのセクションには、以下のようになります。あなたがいることを達成するために、いくつかの方法を見つけるインターネット上

<profiles> 
    <profile> 
     <id>development</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <jsfProjectStage>Development</jsfProjectStage> 
     </properties> 
    </profile> 
    <profile> 
     <id>production</id> 
     <properties> 
      <jsfProjectStage>Production</jsfProjectStage> 
     </properties> 
    </profile> 
</profiles> 

、例えば代わりのweb.xmlファイルを使用します。あなたは、このコードスニペット、私はそれが私のために働いていない理由だろうと多くの回答や記事を見つけるので

<build> 
    <finalName>...</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <webResources> 
        <webResource> 
         <directory>src/main/webapp/WEB-INF</directory> 
         <filtering>true</filtering> 
         <targetPath>WEB-INF</targetPath> 
         <includes> 
          <include>web.xml</include> 
         </includes> 
        </webResource> 
       </webResources> 
      </configuration> 
     </plugin> 

     ... 

    </plugins> 
</build> 

:しかし、私には最も明白な方法は、Mavenの戦争 - プラグインを使用しているようです。私は<webResource><resource>と置き換えようとしました(しばしばこの方法で見つけました)。また、<filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>を追加しようとしましたが、それは何もしません。

誰かがアイデアを持っていますが、web.xmlを正しくフィルタリングするためにここには何が欠けていますか?または、明示的に<filters>を指定する必要がありますか?

おかげ
セバスチャン

アップデート:私はフィルタリングされませんweb.xml理由は、Mavenの戦争 - プラグインが、桟橋 - のmaven-pluginのではないことを今知っているuser944849
おかげで、私はmvn jetty:runを使って(組み立てられていない)webappを実行しているからです。組み立てられていないwebappを実行する前に、jetty-maven-pluginsにweb.xmlをフィルタリングする方法を誰かが知っていますか?

+0

は何ですか?特に、どのようにプロファイルを有効にしていますか? ''は、他のプロファイルがアクティブでない場合にのみアクティブであることを意味します。 – user944849

+0

Eclipse内からMavenを使用し、開発ビルドの_Run Configuration_の_Goals_は明示的な_Profiles_セットなしで 'clean jetty:run'に設定されています。プロダクションビルドのゴールは_Profiles_を 'production'に設定して' clean install'に設定します。 –

+1

プロダクションはweb.xmlをフィルタリングしますか? 'jetty:run'は_unassembled_ webappを実行するので、' jetty:run'は動作しません。フィルタリングはwarプラグインがパッケージ段階の一部として実行されるときに起こります。 'jetty:run'はIIRCを使用しません。 jettyにフィルタリングをさせる方法を理解するために、多少の調査をする必要があるでしょう。または、完全に組み立てられたwebappに対してjettyを使用する必要があるかもしれません。 – user944849

答えて

5

問題はMavenの戦争 - プラグインが、桟橋 - のmaven-pluginのではなかったことを考え出すの後、私はちょうどに埋め込まれた桟橋に組み立てたWebアプリケーションを実行するためにmvn clean jetty:run-warmvn clean jetty:runからのmavenコマンドを変更する必要がありましたデプロイメント記述子もまたフィルタリングされます。あなたの助けの人たちのための

おかげ
セバスチャン

0

あなたの設定は正しいようですが、私の経験上、<filters>セクションも必要な場合があります。

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>${maven-war-plugin.version}</version> 
      <configuration> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
       <webResources> 
        <resource> 
         <directory>src/main/webapp</directory> 
         <filtering>true</filtering> 
         <includes> 
          <include>**/bm.js</include> 
         </includes> 
        </resource> 
       </webResources> 
       <warName>${war.name}</warName> 
      </configuration> 
     </plugin> 
    </plugins> 
    <filters> 
     <filter>src/main/filters/filter-${target.environment}.properties</filter> 
    </filters> 
</build> 

bm.jsファイルは、値が2つの異なるファイル、filter-dev.propertiesfilter-qa.propertiesに設定されているマクロ${my.property}への参照が含まれています。たとえば

は、私のアプリケーションは次のように何かをしています。私はそれに応じてtarget.environmentプロパティを定義する親POMに2つの異なるメイプルプロファイル(devqaと呼ばれる)を持っています。

プロファイルを指定してmvn packageを実行すると、bm.jsのマクロが正しい値に置き換えられます。

私はこれがweb.xmlで必要なことを100%確信していませんが、試してみることができます。

+0

新しい値(置換後)は、 'pom.xml'のMavenプロファイルのプロパティ変数から来ているので、余分なフィルタファイルを使うのは意味がありません。それにもかかわらず、私はそれを試したが、それでも 'web.xml 'で何もフィルタリングしない。 –

0

ちょうど私の2セント:実行戦争が必要になりますよう実行戦争を使用して

は、実行を使用するよりも少し悪いですパッケージング - 開発には便利ではありません。私のために働いたソリューションは、これらの手順に従うことです(私はもっとシンプルなものを想像することができるが、我々はいくつかのMavenとプロジェクトを展開中tweeks持っている):あるとして

  1. まま、デフォルトのWebアプリケーションのリソースフィルタリングをし、私たち自身、カスタムを追加します実際のパッケージングの前の最後の段階として、カスタム・ドキュメントルート(および代替のweb.xml)を製造パッケージする(Mavenを2.2.1+)
  2. バインド桟橋相にフィルタリング
  3. ポイント桟橋の設定
  4. 一度一つは、単にことができる行いますmavenを実行し、コマンドラインでプロパティを指定します。以下のような:mvn -Djetty=run -Djetty.webcontext=any-web-context -Djetty.port=8180 prepare-package

以下のコンフィグがMaven2をためですが、修正新しいorg.eclipse.jettyため& maven3は簡単でなければなりません:あなたのMavenコマンドは

<!-- jetty:run --> 
    <profile> 
     <id>jetty-run</id> 
     <activation> 
      <property> 
       <name>jetty</name> 
       <value>run</value> 
      </property> 
     </activation> 
     <properties> 
      <jetty.docroot>${project.build.directory}/jetty-docroot</jetty.docroot> 
     </properties> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-resources-plugin</artifactId> 
        <version>2.4.3</version> 
        <executions> 
         <execution> 
          <id>jetty-docroot</id> 
          <phase>prepare-package</phase> 
          <goals> 
           <goal>copy-resources</goal> 
          </goals> 
          <configuration> 
           <outputDirectory>${jetty.docroot}</outputDirectory> 
           <resources> 
            <resource> 
             <directory>${basedir}/src/main/webapp</directory> 
             <filtering>true</filtering> 
            </resource> 
           </resources> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
       <plugin> 
        <!-- for maven2, use org.eclipse.jetty for maven3 + slightly different configuration --> 
        <groupId>org.mortbay.jetty</groupId> 
        <artifactId>maven-jetty-plugin</artifactId> 
        <configuration> 
         <connectors> 
          <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> 
           <port>${jetty.port}</port> 
           <maxIdleTime>60000</maxIdleTime> 
          </connector> 
         </connectors> 
         <scanIntervalSeconds>10</scanIntervalSeconds> 
         <contextPath>/${jetty.webcontext}</contextPath> 
         <webXml>${jetty.docroot}/WEB-INF/web.xml</webXml> 
         <webAppSourceDirectory>${jetty.docroot}</webAppSourceDirectory> 
         <!-- maven3 
         <webApp> 
          <contextPath>/${jetty.webcontext}</contextPath> 
          <descriptor>${jetty.docroot}/WEB-INF/web.xml</descriptor> 
          <baseResource>${jetty.docroot}</baseResource> 
         </webApp> 
         --> 
         <systemProperties> 
          <systemProperty> 
           <name>java.awt.headless</name> 
           <value>true</value> 
          </systemProperty> 
         </systemProperties> 
        </configuration> 
        <executions> 
         <execution> 
          <id>jetty-run</id> 
          <phase>prepare-package</phase> 
          <goals> 
           <goal>run</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
関連する問題