सर्वलेट 3.0 एपीआई के लिए मावेन निर्भरता?


229

मैं सर्वेन 3.0 एपीआई को लोड करने के लिए मावेन 2 को कैसे बता सकता हूं?

मैंने कोशिश की:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>3.0</version>
    <scope>provided</scope>
</dependency>

मैं http://repository.jboss.com/maven2/ का उपयोग करता हूं लेकिन क्या रिपॉजिटरी सही होगी?

परिशिष्ट:

यह पूरे जावा ईई 6 एपीआई और निम्नलिखित सेटिंग्स के लिए एक निर्भरता के साथ काम करता है:

<repository>
    <id>java.net</id>
    <url>http://download.java.net/maven/2</url>
</repository>

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

मैं केवल निर्भरता के रूप में सर्वलेट एपीआई जोड़ना चाहता हूं, लेकिन "ब्रेबस्टर" सही हो सकता है कि जावा ईई 6 प्रोफाइल द्वारा अलग-अलग निर्भरताएं बदल दी गई हैं। क्या कोई ऐसा स्रोत है जो इस धारणा की पुष्टि करता है?


84
कोई स्रोत नहीं, java.net/maven/2 रिपॉजिटरी में कोई javadocs नहीं। ओरेकल, भाड़ में जाओ!
स्टैच्यून्ग

2
सर्वलेट-अपी के बजाय जावा-आपी का उपयोग करने से आपको javax.servlet.ServletContext का समान संस्करण नहीं मिलता है। मैं स्प्रिंग फ्रेमवर्क 3.1 का उपयोग कर रहा हूं और डायनेमिक डिस्पैसर (एनोटेशन) का उपयोग कर रहा हूं। साद का जवाब ही एकमात्र जवाब है जो मेरे लिए काम करता है। आपको वास्तव में पास्कल के साथ नहीं जाना चाहिए क्योंकि यह अधिक सामान्य लगता है। बिल्ली .. प्रवणता निर्भरता को हल करने में मावेन को हरा देती है।
मुकुस

OMG, वे बदल विरूपण साक्ष्य नाम से servlet-apiकरने के लिए javax.servlet-api। आधे घंटे का "डिबगिंग" खो गया ...: /
insan-e

जवाबों:


116

मैं केवल निर्भरता के रूप में सर्वलेट एपीआई जोड़ना चाहूंगा,

सच कहूं, तो मुझे समझ में नहीं आ रहा है कि क्यों लेकिन कभी भी मन नहीं ...

Brabster अलग निर्भरता जावा EE 6 प्रोफाइल द्वारा प्रतिस्थापित किया गया है। क्या कोई ऐसा स्रोत है जो इस धारणा की पुष्टि करता है?

जावा.net से मावेन भंडार वास्तव में वेबप्रोफाइल के लिए निम्नलिखित विरूपण साक्ष्य प्रदान करता है:

<repositories>
  <repository>
    <id>java.net2</id>
    <name>Repository hosting the jee6 artifacts</name>
    <url>http://download.java.net/maven/2</url>
  </repository>
</repositories>        
<dependencies>
  <dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

इस जार में सर्वलेट 3.0, EJB लाइट 3.1, JPA 2.0, JSP 2.2, EL 1.2, JSTL 1.2, JSF 2.0, JTA 1.1, JSR-45, JSR-250 शामिल हैं।

लेकिन मेरी जानकारी में, कुछ भी यह कहने की अनुमति नहीं देता है कि ये एपीआई अलग से वितरित नहीं किए जाएंगे (java.net रिपॉजिटरी या कहीं और)। उदाहरण के लिए (ठीक है, यह एक विशेष मामला हो सकता है), JSF 2.0 एपीआई अलग से उपलब्ध है (java.net रिपॉजिटरी में):

<dependency>
   <groupId>com.sun.faces</groupId>
   <artifactId>jsf-api</artifactId>
   <version>2.0.0-b10</version>
   <scope>provided</scope>
</dependency>

और वास्तव में, आप वहांjavax.servlet-3.0.jar से प्राप्त कर सकते हैं और इसे अपने स्वयं के भंडार में स्थापित कर सकते हैं।


3
एक छोटा सुधार: जावा-वेब-एपी में ईएल 2.2 (यूनिफाइड एक्सप्रेशन लैंग्वेज 2.2) शामिल है, ईएल 1.2 नहीं
एंड्री

1
... और धीरे-धीरे उपयोग के लिए: 'javax: javaee-web-api: 6.0' संकलन
रॉबर्ट क्रिश्चियन

1
ध्यान दें कि javaee-web-apiकेवल विधि स्टब्स (कोई बाइट कोड) नहीं है। आप इस निर्भरता का उपयोग उस providedदायरे से बाहर नहीं कर सकते, जिसके कारण मैं Sa'ad के सुझाव को प्राथमिकता देता हूं।
राफेल विंटरथेलर

2
@Pascal - "मैं केवल निर्भरता के रूप में सर्वलेट एपीआई जोड़ना पसंद करेंगे," - आप क्या करेंगे कि यदि आप एक शुद्ध सर्वलेट कंटेनर (बिल्ला, घाट) बनाम एक जेईई अनुरूप कंटेनर (TomEE, wildfly, आदि) के साथ काम कर रहे हैं
यो यो

1
javaee-वेब-api के लिए अद्यतन किया गया है<version>7.0</version>
OJVM

461

यह हाल ही में जोड़ा जा रहा है:

http://repo1.maven.org/maven2/javax/servlet/javax.servlet-api/3.0.1/

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
</dependency>


1
अरे, यह ठीक काम करता है, लेकिन मुझे यकीन नहीं है कि इसका इस्तेमाल करने के लिए सटीक निर्भरता है (उदाहरण के लिए टॉमकैट 7 के साथ); इसका कारण यह है कि इस निर्भरता से जुड़े सूत्र मैच नहीं करते हैं कि वास्तव में क्या चल रहा है जब आप वास्तव में डीबगिंग करते हैं।
यूजेन 14

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

5
यह सिर्फ विरूपण साक्ष्य का पुन: उपयोग क्यों नहीं किया servlet-api? क्योंकि यह <excludes>पुरानी कलाकृतियों के लिए जोड़ने के लिए मज़ेदार है (यदि आपके क्लासपाथ पर पुराने और नए दोनों सर्वलेट एप को प्राप्त करने से रोकने के लिए यदि आपकी कोई निर्भरता अभी भी पुराने पर निर्भर करती है)? :)
जेफ्री डी स्मेट

3
FYI करें, सबसे हाल का संस्करण है javax.servlet-api-3.1.0। बस सुनिश्चित करें कि आपका सर्वलेट कंटेनर उस संस्करण को संभाल सकता है। उदाहरण के लिए टॉमकैट का संस्करण 8 3.1 को संभाल सकता है
बेसिल बोर्क

37

या आप सर्वलेट 3.0 एपीआई के साथ सेंट्रल मावेन रिपॉजिटरी का उपयोग कर सकते हैं जो कि टॉमकैट सर्वर 7.0.X के लिए भी प्रदान किया गया है।

    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>7.0.21</version>
        <scope>provided</scope>
    </dependency>

यहाँ से: http://repo2.maven.org/maven2/org/apache/tomcat/tomcat-servlet-api/7.0.21/


25

यहाँ मैं क्या उपयोग है। ये सभी केंद्र में हैं और इनके स्रोत हैं।

टॉमकैट 7 (जावा 7, सर्वलेट 3.0) के लिए

नोट - टॉमलेट में सर्वलेट, जेएसपी और ईएल एपीआई प्रदान किए गए हैं। केवल JSTL (यदि उपयोग किया जाता है) को वेब ऐप के साथ बंडल करने की आवश्यकता है।

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>2.2.4</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

टॉमकैट 8 (जावा 8, सर्वलेट 3.1) के लिए

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

यह काम करता है, लेकिन निर्धारित निर्भरताएं मावेन अनुभाग में होती हैं, लेकिन कभी भी डब्ल्यूएआर फ़ाइल में शामिल नहीं होती हैं क्योंकि उन्हें "प्रदान" के रूप में चिह्नित किया जाता है। लेकिन ... मुझे टॉमकैट लिब्रेट डायरेक्टरी में जार का इस्तेमाल करने का प्रोजेक्ट कभी नहीं मिल सकता है, भले ही मैंने इस टॉस्क लिबेट डाइरेक्टरी को एक्लिप्स बिल्ड पाथ में शामिल किया हो, और उन्हें वहां साफ तौर पर देखा जा सकता है। मेरा pom.xml इन टॉम्कट जार को कभी भी हल नहीं कर सकता है और हमेशा 3.0 मेव टोमाट आपूर्ति के बजाय स्थानीय मावेन रेपो से सर्वलेट-एपीआई जार के संस्करण 3.0.1 की आवश्यकता होती है। मुझे नहीं पता कि यह क्यों है ... क्या कोई समझा सकता है?
गीब

क्या आप <groupId> javax.servlet </ groupId> <विरूपण साक्ष्य> javax.servlet-api </ विरूपण साक्ष्य> का कौन सा संस्करण दे सकते हैं?
Gog1nA

24

दुर्भाग्यवश, एक निर्भरता के रूप में javaee- (वेब) -पी को जोड़ने से आपको IDE के भीतर से ब्राउज़ करने के लिए Javadoc या Source to Servlet Api नहीं मिलता है। यह अन्य सभी निर्भरताओं (JPA, EJB, ...) के लिए भी मामला है। यदि आपको सर्वलेट एपीआई स्रोतों / javadoc की आवश्यकता है, तो आप अपने pom.xml में निम्न जोड़ सकते हैं (कम से कम JBoss और Glassfish के लिए काम करता है:

भंडार:

<repository>
  <id>jboss-public-repository-group</id>
  <name>JBoss Public Repository Group</name>
  <url>https://repository.jboss.org/nexus/content/groups/public/</url>
</repository>

निर्भरता:

<!-- Servlet 3.0 Api Specification -->
<dependency>
   <groupId>org.jboss.spec.javax.servlet</groupId>
   <artifactId>jboss-servlet-api_3.0_spec</artifactId>
   <version>1.0.0.Beta2</version>
   <scope>provided</scope>
</dependency>

मैंने जावा-एपि को अपनी निर्भरता से पूरी तरह से हटा दिया और इसे जावा ईई 6 के सभी भागों के स्रोतों और जावदोक्स प्राप्त करने के लिए असतत भागों (javax.ejb, javax.faces, ...) के साथ बदल दिया।

संपादित करें:

यहां बराबर ग्लासफिश निर्भरता है (हालांकि दोनों निर्भरताएं काम करनी चाहिए, कोई फर्क नहीं पड़ता कि आप क्या उपयोग करते हैं)।

<dependency>
  <groupId>org.glassfish</groupId>
  <artifactId>javax.servlet</artifactId>
  <version>3.0</version>
  <scope>provided</scope>
</dependency>

1
हमें संस्करण को निर्दिष्ट करने की आवश्यकता क्यों है 1.0.0.Beta2, यदि यह वह संस्करण है 3.0जिसकी हमें आवश्यकता है? यह इसे जटिल बनाता है।
जेफ्री डी स्मेट

9

अपाचे जेरोनिमो परियोजना मावेन सेंट्रल रेपो पर एक सर्वलेट 3.0 एपीआई निर्भरता प्रदान करती है:

<dependency>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-servlet_3.0_spec</artifactId>
    <version>1.0</version>
</dependency>

2
यह काम करता है, और सबसे सरल तरीका लगता है, धन्यवाद! BTW अपाचे जेरोनिमो के पास प्रस्ताव देने के लिए बहुत कुछ है: mvnrepository.com/artifact/org.apache.geronimo.specs
स्टिवेलो

5

सिर्फ नए लोगों के लिए।

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

4

मुझे सितंबर से डिजोन पर सर्वलेट 3.0 एपीआई के लिए एक उदाहरण पीओएम मिला।

क्या आप http://download.java.net/maven/2 पर java.net रेपो का उपयोग करते हैं?

वहाँ जावा ईई एपीआई हैं, उदाहरण के लिए http://download.java.net/maven/2/javax/javaee-web-api/6.0/ POM के साथ कि जैसे वे हो सकते हैं जैसे कि आप के बाद हैं, उदाहरण के लिए :

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

मैं अनुमान लगा रहा हूं कि नए 'प्रोफाइल' के हिस्से के रूप में एपीआई के लिए संस्करण सम्मेलनों को समग्र ईई युक्ति (यानी जावा ईई 6 बनाम सर्वलेट्स 3.0) के संस्करण से मिलान करने के लिए बदल दिया गया है। JAR में देखते हुए, लगता है कि सभी 3.0 सर्वलेट सामान वहाँ हैं। का आनंद लें!


धन्यवाद, यह काम करता है! केवल शेष प्रश्न है, यदि जावा ईई 6 प्रोफाइल ने अलग-अलग परिवादों को प्रतिस्थापित किया। (मेरे सवाल में परिशिष्ट देखें)
deamon को

यदि आप इस पर निर्भर हैं, तो आप पोर्टेबल युद्ध नहीं कर सकते हैं (एक जो JBoss, Tomcat, Jetty, ... पर काम करता है), क्योंकि Tomcat / Jetty के लिए, आपको उस निर्भरता (सर्वलेट) के हिस्से को डालना होगा। इसका एक हिस्सा प्रदान नहीं किया गया है (सीडीआई), जो असंभव है।
जेफ्री डी स्मेट

3

जावा EE 6 निर्भरताओं को शामिल करने के लिए एक सुविधाजनक तरीका (JBoss अनुशंसित) नीचे प्रदर्शित किया गया है। परिणामस्वरूप निर्भरताएं अलग-अलग रखी जाती हैं (सभी एक जार में जावा-वेब-एपी के रूप में नहीं), स्रोत फाइलें और पुस्तकालयों के javadocs maven repository से डाउनलोड करने के लिए उपलब्ध हैं।

<properties>
    <jboss.javaee6.spec.version>2.0.0.Final</jboss.javaee6.spec.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.jboss.spec</groupId>
        <artifactId>jboss-javaee-web-6.0</artifactId>
        <version>${jboss.javaee6.spec.version}</version>
        <scope>provided</scope>
        <type>pom</type>
    </dependency>
</dependencies>

केवल व्यक्तिगत निर्भरता को शामिल करने के लिए, dependencyManagementअनुभाग और गुंजाइश importका उपयोग किया जा सकता है:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.jboss.spec</groupId>
                <artifactId>jboss-javaee6-specs-bom</artifactId>
                <version>${jboss.javaee6.spec.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!-- No need specifying version and scope. It is defaulted to version and scope from Bill of Materials (bom) imported pom. -->
        <dependency>
            <groupId>org.jboss.spec.javax.servlet</groupId>
            <artifactId>jboss-servlet-api_3.0_spec</artifactId>
        </dependency>
    </dependencies>

-3

इस कोड को आज़माएं ...

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>3.0-alpha-1</version>
    </dependency>

अल्फा चरण में निर्भरता हमेशा उत्पादन आवेदन के लिए उपयुक्त नहीं होती है।
Stephan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.