2011-05-03 15 views
23

वर्तमान में यदि मैं myapp.war नामक टोमकैट पर एक युद्ध फ़ाइल तैनात करता हूं, तो मैं http://localhost/myapp/MyServlet द्वारा अपने यूआरएल तक पहुंच सकता हूं।युद्ध फ़ाइल नाम से युद्ध आवेदन नाम अलग करना

हालांकि मैं जो चाहता हूं वह युद्ध फ़ाइल नाम में संस्करण संख्या के साथ युद्ध को तैनात करना है और अभी भी वही यूआरएल है। उदाहरण के लिए, मैं myapp-1.1.0.war तैनात करने के लिए करना चाहते हैं और अभी भी यूआरएल http://localhost/myapp/MyServlet

बेशक

मैं युद्ध और संस्करण संख्या बदल रहा रखेंगे अद्यतन करने रखने की जरूरत हो, तो मैं नहीं कर सकते युद्ध फ़ाइल नाम कहीं भी हार्डकोड। क्या web.xml में कोई सेटिंग है जो मैं युद्ध फ़ाइल नाम के बावजूद ऐप के लिए एक ही यूआरएल रखने के लिए उपयोग कर सकता हूं?

+0

तुम सिर्फ जोड़ना चाहते हैं आपके फ़ाइल नाम के लिए एक संस्करण जानकारी, इस प्रश्न का मेरा उत्तर जांचें: http://stackoverflow.com/a/33822607/1458639 –

उत्तर

7

आप इसके लिए YOUR_WAR/META-INF/context.xml का उपयोग कर सकते हैं।

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" path="/MyServlet"/> 
+1

@ मैथ्यू गिलार्ड जहां तक ​​मुझे पता है कि टॉमकैट दस्तावेज़ों में सर्वर में एक संदर्भ तत्व नहीं डालना है। एक्सएमएल। उन्हें मेटा-आईएनएफ/context.xml के साथ कोई समस्या नहीं है। दस्तावेज़ आपको यह भी बताते हैं कि context.xml कैसे काम करता है। दस्तावेज़ों से: "संदर्भ तत्वों को स्पष्ट रूप से परिभाषित किया जा सकता है: * $ CATALINA_BASE/conf/context.xml फ़ाइल में: संदर्भ तत्व जानकारी सभी वेबैप द्वारा लोड की जाएगी।" –

+2

क्या मैं इसे गलत तरीके से पढ़ रहा हूं? "पथ" खंड कहता है: "इस फ़ील्ड का मान सेट नहीं किया जाना चाहिए जब सर्वर.एक्सएमएल में एक संदर्भ को स्थिर रूप से परिभाषित किया जाए" –

+0

मुझे लगता है कि इस क्षेत्र में टॉमकैट का व्यवहार (और दस्तावेज़ीकरण!) बहुत भ्रमित है। इनमें से कम से कम नहीं: यदि आप तय करते हैं कि आप अपने वेबैप के संदर्भ-रूट को बदलना चाहते हैं तो आपको $ CATALINA_BASE/conf (उस पृष्ठ पर परिचय अनुभाग में 5 में से 5 बुलेट पॉइंट्स) से मैन्युअल रूप से फ़ाइल को हटाना होगा। –

13

समाधान बिलाव, जो (यूआरएल की /myapp हिस्सा) युद्ध के भाग के लिए "संदर्भ नाम" की स्थापना के शॉर्टकट लेता है का स्वत: तैनाती सुविधा का उपयोग बंद करने के लिए है: यहाँ एक नमूना है ".war" से पहले फ़ाइल नाम।

इसके बजाय, फाइल सिस्टम अपने आप को और सेटअप जो वांछित संदर्भ पथ (जैसे /myapp के रूप में) बताते हैं TOMCAT_HOME/conf/[enginename]/[hostname]/[contextname].xml पर एक XML फ़ाइल डिस्क (जैसे /opt/webapps/myapp-1.1.0/ के रूप में) पर आवेदन के स्थान पर करने के लिए युद्ध सामग्री निकालें।

Tomcat reference docs टॉमकैट स्वचालित रूप से एप्लिकेशन को कैसे तैनात करता है, और एप्लिकेशन फ़ाइल स्थान के संदर्भ पथ के मैपिंग के लिए आप अनुकूलित तर्क को कैसे कॉन्फ़िगर कर सकते हैं, इस बारे में अच्छी व्याख्या प्रदान करते हैं (इसे एक के अलावा इसे सेट करने के वैकल्पिक तरीकों का एक मुट्ठी भर है मैं उपरोक्त सुझाव देता हूं)।

+3

के साथ काम नहीं करता है इसका मतलब यह है कि हर बार जब मैं अद्यतन फ़ाइल नाम के साथ युद्ध का एक नया संस्करण तैनात करता हूं तो मुझे .xml फ़ाइल को भी अपडेट करना होगा? – pdeva

+1

मैं थोड़ा उलझन में हूँ। इस मामले में 'myapp.xml' फ़ाइल की सामग्री को युद्ध के स्थान पर इंगित करने के लिए क्या होना चाहिए? – pdeva

+1

कुछ ' 'जैसे कुछ। टॉमकैट संदर्भ पथ के रूप में '.xml' एक्सटेंशन के बिना फ़ाइल के नाम का उपयोग करेगा। मेरे सिम्लिंक सुझाव के संबंध में मैंने अभी दस्तावेज़ों में ध्यान दिया है कि यह बताता है कि यदि दस्तावेज़ के लिए एक प्रतीकात्मक लिंक का उपयोग किया जाता है तो प्रतीकात्मक लिंक में परिवर्तन केवल टॉमकैट पुनरारंभ करने के बाद या संदर्भ को पुन: नियोजित और पुन: नियोजित करने के बाद प्रभावी होगा। एक संदर्भ रीलोड पर्याप्त नहीं है। –

1

इसके लिए web.xml में कोई सेटिंग नहीं है। मुझे विश्वास नहीं है कि इसे युद्ध फ़ाइल के अंदर एक क्रॉस-कंटेनर तरीके से सेट करना संभव है - वैसे भी इसका कोई उल्लेख नहीं है - इसलिए प्रत्येक कंटेनर इसे अलग करता है। jboss-web.xml, sun-web.xml, context.xml आदि

4

जब Maven का उपयोग कर अपने अनुयायीयों कार्य करके अपना तैनाती के पथ पर नियंत्रण कर सकते हैं:

बिलाव के conf/बिल्ला-users.xml:

<tomcat-users> 
    <role rolename="manager-gui"/> 
    <role rolename="manager-script"/> 
    <role rolename="manager-jmx"/> 
    <role rolename="manager-status"/> 
    <role rolename="admin-gui"/> 
    <role rolename="admin-script"/> 

    <user username="root" password="root" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/> 

</tomcat-users> 

~/.m2/settings.xml:

... 
<server> 
    <id>tomcat</id> 
    <username>root</username> 
    <password>root</password> 
</server> 
... 

pom.xml:

... 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.example</groupId> 
    <artifactId>myapp</artifactId> 
    <version>1.1.0</version> 
    <packaging>war</packaging> 
... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>tomcat-maven-plugin</artifactId> 
     <configuration> 
      <!-- neglect /html below Tomcat7: --> 
      <url>http://server:8080/manager/html</url> 
      <!-- Refer to the server settings in your ~/.m2/settings.xml --> 
      <server>tomcat</server> 
      <path>/myWebApp</path> 
     </configuration> 
     </plugin> 
     .... 
    </plugins> 
    </build> 
... 
अपने बिल्ला शुरू

पहले तो निर्माण और आपके आवेदन को तैनात ..

mvn clean install tomcat:deploy 

..it http://server:8080/myWebApp

+0

@nir सुधार के लिए धन्यवाद –

0

अंतर्गत सुलभ हो जाएगा मैंने कहा एक ही मुद्दे में चलाने के लिए, और वास्तव में, @matt के रूप में , Tomcat reference docs कैसे एक अच्छा स्पष्टीकरण प्रदान करता है कि टोमकैट स्वचालित रूप से एप्लिकेशन को कैसे तैनात करता है, और आप एप्लिकेशन फ़ाइल स्थान के संदर्भ पथ के मैपिंग के लिए अनुकूलित तर्क को कैसे कॉन्फ़िगर कर सकते हैं।

मेरे मामले में, मैं यह सलाह इस्तेमाल किया ('पथ' विवरण में): यहां तक ​​कि

जब स्थिर server.xml में एक प्रसंग को परिभाषित करने, इस विशेषता (/ पथ) नहीं सेट किया जाना चाहिए जब तक कि docBase होस्ट के ऐपबेस या दोनों के अंतर्गत स्थित नहीं है, तो दोनों तैनातीऑनस्टार्टअप और ऑटोडिएंट झूठी हैं। यदि इस नियम का पालन नहीं किया गया है, तो डबल परिनियोजन परिणाम होने की संभावना है।

तो मेरे मामले में, मैं दोनों deployOnStartup और autoDeploy झूठी का प्रयोग किया, तो मेरे युद्ध (egaWAR) webapps के तहत 'एक' निर्देशिका के लिए स्वत: विस्फोट, लेकिन इसके बजाय 'बी' निर्देशिका में, की वजह से नहीं था इन सेटिंग्स:

<Host name="localhost" appBase="webapps" 
      autoDeploy="false" deployOnStartup="false" 
      unpackWARs="true" deployIgnore="${ignore.context}"> 

    <Context docBase="a" path="/b" /> 

</Host> 
0

मैं बिल्ला में * .war फ़ाइलों के संस्करण ध्यान देने योग्य बात के लिए उपयोग करने के लिए "##" प्रतीकों पसंद करते हैं।
उदाहरण के लिए:
myapp.war -> यूआरएल: http://localhost:8080/myapp/MyServlet
myapp##1.1.0 -> यूआरएल: http://localhost:8080/myapp/MyServlet (अब भी वही है, क्योंकि सभी प्रतीकों के बाद "##" बिल्ला द्वारा अनदेखी कर रहे हैं)

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