2013-06-18 4 views
5

मूल पोस्ट:
मैं फिल्टर करने के लिए एक जावा 6 वेब अनुप्रयोग जो जेट्टी 8.1 सर्वलेट कंटेनर पर चल रहा है की 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> जोड़ने की कोशिश की लेकिन उस काम के कुछ भी नहीं।

क्या किसी के पास कोई विचार है, वेब.एक्सएमएल को सही ढंग से फ़िल्टर करने के लिए यहां क्या गुम है? या मुझे स्पष्ट रूप से <filters> निर्दिष्ट करना है?

धन्यवाद
सेबस्टियन

अद्यतन:
धन्यवाद user944849 को मैं अब जानते हैं कि web.xml मेरी फ़िल्टर नहीं करने के लिए कारण Maven युद्ध प्लगइन लेकिन घाट-Maven-प्लगइन नहीं है, चूंकि मैं mvn jetty:run का उपयोग (असंबद्ध) वेबपैप चलाने के लिए करता हूं। क्या किसी को पता है कि कैसे unassembled वेबपैप चलाने से पहले web.xml फ़िल्टर करने के लिए jetty-maven-plugin को लाने के लिए?

+0

अपने Maven आदेश क्या है? विशेष रूप से, आप प्रोफ़ाइल को कैसे सक्रिय कर रहे हैं? ' 'का अर्थ है" केवल तभी सक्रिय जब कोई अन्य प्रोफ़ाइल सक्रिय न हो। " – user944849

+0

मैं ग्रहण के भीतर से मैवेन का उपयोग करता हूं और विकास निर्माण के लिए _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ उत्पादन निर्माण के लिए लक्ष्य _Profiles_ सेट 'उत्पादन' के साथ' क्लीन इंस्टॉल 'पर सेट है। –

+1

क्या उत्पादन एक वेब.एक्सएमएल फ़िल्टर करता है जैसा आप उम्मीद करेंगे? यह मुझे आश्चर्य नहीं करता कि 'जेटी: रन' काम नहीं करता है, क्योंकि 'जेटी: रन' एक _unassembled_ webapp निष्पादित करता है। फ़िल्टरिंग तब होती है जब युद्ध प्लगइन पैकेज चरण के हिस्से के रूप में चलाया जाता है, जो 'जेटी: रन' आईआईआरसी का उपयोग नहीं करता है। जेटी को फ़िल्टरिंग करने के तरीके को जानने के लिए आपको शायद थोड़ा सा शोध करने की आवश्यकता है। या, आपको पूरी तरह से इकट्ठे वेबपैप के खिलाफ जेटी का उपयोग करने की आवश्यकता हो सकती है। – user944849

उत्तर

5

पता लगाना है कि समस्या Maven युद्ध प्लगइन लेकिन घाट-Maven-प्लगइन नहीं था के बाद, मैं तो बस आदेश में एम्बेडेड घाट पर एक इकट्ठे webapp चलाने के लिए mvn clean jetty:run-war को mvn 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.properties और filter-qa.properties में सेट किया गया है एक मैक्रो ${my.property} के लिए एक संदर्भ, शामिल हैं:

उदाहरण के लिए, अपने आवेदन करने के लिए कुछ इसी तरह की है। मेरे पास माता-पिता पीओएम में 2 अलग-अलग मेवेन प्रोफाइल हैं (जिन्हें dev और qa कहा जाता है) जिसमें मैं target.environment संपत्ति को तदनुसार परिभाषित करता हूं।

प्रोफ़ाइल निर्दिष्ट करते समय mvn package चलाते समय, bm.js में मैक्रो को सही मान के साथ प्रतिस्थापित किया जाएगा।

मुझे 100% यकीन नहीं है कि यह web.xml के साथ आवश्यक काम करेगा, लेकिन आप इसे आज़मा सकते हैं।

+0

यह किसी भी तरह से एक अतिरिक्त फ़िल्टर फ़ाइल का उपयोग करने के लिए समझ में नहीं आता है, क्योंकि नया मान (प्रतिस्थापन के बाद) 'pom.xml' में मैवेन प्रोफाइल गुण चर से आता है। फिर भी मैंने कोशिश की और यह अभी भी 'web.xml' में कुछ भी फ़िल्टर नहीं करता है। –

0

बस मेरे 2 सेंट:

का उपयोग रन युद्ध, रन का उपयोग करने से थोड़ा भी बदतर है के रूप में रन युद्ध की आवश्यकता होगी पैकेजिंग - विकास के लिए आसान नहीं है। समाधान है कि मेरे लिए काम किया उन चरणों का पालन करने के लिए है (मैं एक और अधिक सरल एक कल्पना कर सकते हैं, लेकिन हम Maven और परियोजना तैनाती में कई tweeks है):

  1. छोड़ दो डिफ़ॉल्ट webapp संसाधन को छानने के रूप में और हमारे अपने, कस्टम जोड़ने छानने
  2. प्वाइंट घाट वास्तविक पैकेजिंग से पहले कस्टम docroot (और वैकल्पिक web.xml)
  3. बाइंड तैयार-पैकेज (Maven 2.2.1+) के घाट चरण अंतिम चरण के रूप में config
  4. इसके बाद, एक कर सकते हैं बस मेवेन चलाएं और कमांड लाइन पर गुण प्रदान करें, सेंट। जैसे: mvn -Djetty=run -Djetty.webcontext=any-web-context -Djetty.port=8180 prepare-package

नीचे कॉन्फ़िग maven2 के लिए है, लेकिन नए org.eclipse.jetty & maven3 के लिए संशोधन सरल होना चाहिए:

<!-- 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> 
संबंधित मुद्दे