2012-02-14 13 views
17

मैंने एक नया जावा ईई 6 प्रोजेक्ट बनाने के लिए एक मेवेन आर्केटाइप (webapp-javaee6) का उपयोग किया है, लेकिन यह समझ में नहीं आता कि कुछ चीजें पीओएम के build तत्व के अंदर क्यों रखी गई हैं। विशिष्ट होने के लिए मुझे समझ में नहीं आता कि javaee-endorsed-api.jar को अनुमोदित निर्देशिका में क्यों कॉपी किया गया है। this प्रश्न के उत्तर के अनुसार, संकलन के लिए इसकी आवश्यकता है, लेकिन जब मैं संबंधित plugin तत्व build के तहत हटा देता हूं तो मेरी परियोजना ठीक से संकलित होती है।आर्केटीप्स का उपयोग कर न्यू मेवेन प्रोजेक्ट: पीओएम में जावा-एंडोर्स-एपीआईजर की प्रतिलिपि क्यों बनाई जा रही है?

चूंकि javax:javaee-web-api पहले ही पीओएम में निर्भरता के रूप में प्रदान किया गया है, क्या इसका उपयोग संकलन के लिए नहीं किया जा सकता है?

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <compilerArguments> 
        <endorseddirs>${endorsed.dir}</endorseddirs> 
       </compilerArguments> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.1</version> 
      <executions> 
       <execution> 
        <phase>validate</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${endorsed.dir}</outputDirectory> 
         <silent>true</silent> 
         <artifactItems> 
          <artifactItem> 
           <groupId>javax</groupId> 
           <artifactId>javaee-endorsed-api</artifactId> 
           <version>6.0</version> 
           <type>jar</type> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
+2

मैं व्यक्तिगत रूप से [मेवेन आर्केटाइप वेबएप] (http://maven.apache.org/guides/mini/guide-webapp.html से शुरू करना पसंद करता हूं)) मीठा और सरल, और उसके बाद प्रोजेक्ट आवश्यकता के अनुसार निर्भरता और फैंसी सामान जोड़ें। – Nishant

उत्तर

5

यह संकलन भी इस विरूपण साक्ष्य के लिए एक निर्भरता है क्योंकि वहाँ चाहिए:

<dependencies> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>6.0</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

Maven manual page का वर्णन इस प्रकार है प्रदान की:

यह बहुत संकलन की तरह है, लेकिन इंगित करता है कि आप जेडीके या कंटेनर को रनटाइम पर निर्भरता प्रदान करने की अपेक्षा करते हैं। उदाहरण के लिए, जावा एंटरप्राइज़ संस्करण के लिए वेब एप्लिकेशन बनाने के दौरान, आप सर्वलेट एपीआई और संबंधित जावा ईई एपीआई पर निर्भरता सेट करने के लिए निर्भरता सेट करेंगे क्योंकि वेब कंटेनर उन वर्गों को प्रदान करता है। यह गुंजाइश केवल संकलन और परीक्षण वर्गपथ पर उपलब्ध है, और यह संक्रमणीय नहीं है।

तो मेरी राय में इस निर्भरता की प्रतिलिपि बनाने पर संकलन पर कोई प्रभाव नहीं पड़ता है।

हालांकि आर्केटाइप का लेखक जावा ईई 6 एपीआई पैकेज को अनुमोदित निर्देशिका में कॉपी करने के किसी कारण के लिए चाहता था। यह सहायक हो सकता है यदि आप जेटी सर्वर शुरू करने का निर्णय लेते हैं और "टेस्ट चरण" में कुछ परीक्षण करते हैं (उदाहरण के लिए जुनीट के साथ)।

यदि आप इसका उपयोग नहीं कर रहे हैं - बस इसे हटा दें।

+1

आईएमएचओ, यह उत्तर मुख्य मुद्दे को संबोधित नहीं करता है: "javaee-endorsed-api.jar को अनुमोदित निर्देशिका में क्यों कॉपी किया जाता है"। –

14

[मुद्दा MARCHETYPES-35 में मिला source of the webapp-javaee6 archetype को देख के माध्यम से]

पृष्ठभूमि
पैकेज javax.annotation JSR 250 से: आम एनोटेशन मौजूद है केवल in Java EE लेकिन यह भी in the JDK नहीं।

संस्करण
JDK 6 प्रयोग किया है: आम एनोटेशन 1.0
जावा ईई 6: आम एनोटेशन 1.1
JDK 7: आम एनोटेशन 1.1
जावा ईई 7: आम एनोटेशन 1,2

समस्या
जावा ईई प्रोजेक्ट को संकलित करते समय, जेडीके से एनोटेशन जावा-वेब-एपी जार से एनोटेशन पर प्राथमिकता लेते हैं। जब जावा-वेब-एपीआई से एक एनोटेशन एक नए तत्व को परिभाषित करता है, तो संकलक इसे देख नहीं सकता है और त्रुटि के साथ विफल हो सकता है।

उदाहरण
एक जावा ईई 6 परियोजना @Resource(lookup = "...") उपयोग करता है और JDK 6 के साथ संकलित किया गया है जब के लिए, यह आम तौर पर विफल हो जाएगा।

आम टिप्पणियां 1.1 introduces the new elementResource.lookup()। लेकिन आम तौर पर संकलक केवल जेडीके 6 से संसाधन एनोटेशन देखता है जो आम एनोटेशन 1.0 without this element का उपयोग करता है।

समाधान
के रूप में आप का वर्णन <endorseddirs> संकलक तर्क का उपयोग करने के लिए दिया गया है। एनोटेशन के सही संस्करण का उपयोग करने के लिए कंपाइलर को मजबूर करने के लिए।

जावा ईई 7
मैं जावा ईई 7 के लिए changelog for Common Annotations 1.2 को समझने के रूप में, एनोटेशन पर कोई नया तत्व हैं। तो व्यावहारिक रूप से जावा ईई 7 और जेडीके 7 के साथ शायद ऐसी कोई समस्या नहीं है।

संबंधित मुद्दे