2010-11-03 12 views
8

के साथ एक युद्ध को अनुकूलित हम अपने परियोजना के साथ इस परिदृश्य है:विस्तार करने के लिए कैसे/एक अन्य परियोजना

  • एक कोर वेब अनुप्रयोग एक युद्ध फ़ाइल के रूप में पैक (यह कोर परियोजना कहते हैं)।
  • प्रति ऐप प्रति ग्राहक "कस्टमाइज़" या "विस्तार" करने की आवश्यकता (इसे ग्राहक प्रोजेक्ट कहते हैं)। इसमें अधिकतर नई बीन परिभाषाएं शामिल हैं (हम वसंत का उपयोग कर रहे हैं), यानी। कोर 0war में कार्यान्वयन ग्राहक-विशिष्ट कार्यान्वयन के साथ।
  • हम एक निर्भरता के रूप में कोर परियोजना के साथ कोर और ग्राहक परियोजनाओं स्वतंत्र रूप से
  • जब ग्राहक परियोजना विकसित की है, हम ग्रहण (बिलाव पर) में/यह डिबग चलाने के लिए सक्षम होने की जरूरत है विकसित करना चाहते हैं
  • जब ग्राहक प्रोजेक्ट बनाया गया है, जिसके परिणामस्वरूप युद्ध फ़ाइल में कोर और ग्राहक परियोजनाएं शामिल हैं। तो यह .war आवेदन

मैं टूलींग और परियोजना विन्यास के मामले में यह करने के लिए सबसे अच्छा तरीका है के रूप में सुझाव के लिए देख रहा हूँ की ग्राहक विशेष संस्करण है।

हम वर्तमान में चींटी का उपयोग कर रहे हैं, लेकिन अधिक चींटी में दफन होने से बचना चाहते हैं। क्या किसी ने इसे मेवेन के साथ किया है?

मैंने जावा एप्लिकेशन पर निर्भर वेब एप्लिकेशन बनाने के तरीके पर बहुत सी पोस्ट देखी हैं, लेकिन किसी अन्य वेब ऐप के आधार पर वेब एप्लिकेशन पर कुछ भी नहीं है।

धन्यवाद!

उत्तर

3

ग्रहण में ऐसा करने के लिए एक "मूल" डब्ल्यूटीपी तरीका है। यह मुख्य रूप से जुड़े फ़ोल्डर्स और थोड़ा हैक .settings/org.eclipse.wst.common.component फ़ाइल में उपयोग कर रहा है। आप http://www.informit.com/articles/article.aspx?p=759232&seqNum=3 पर "एकाधिक परियोजनाओं में एक वेब मॉड्यूल को विभाजित करने" नामक अध्याय पर इसके बारे में लेख पढ़ सकते हैं। इसके साथ समस्या यह है कि लिंक किए गए फ़ोल्डर को path variable के सापेक्ष होना चाहिए विंडो/प्राथमिकता/सामान्य/कार्यक्षेत्र/लिंक किए गए संसाधन टैब में परिभाषित किया जा सकता है। अन्यथा लिंक की गई फ़ोल्डर परिभाषा (प्रोजेक्ट रूट में प्रोजेक्ट फ़ाइल में पाई जा सकती है) में वर्कस्टेशन विशिष्ट पथ होगा। पथ चर व्यावहारिक रूप से वर्कस्पेस रूट होना चाहिए। यह समाधान डब्ल्यूटीपी के साथ बहुत अच्छा काम करता है, तैनात करता है और बाकी सब कुछ इस तरह काम करता है।

दूसरा समाधान इसके लिए चींटी का उपयोग करना है। रहने भी दो। आपको गहरा अफसोस होगा।

तीसरा समाधान इसके लिए मेवेन का उपयोग करना है। यदि आप कुछ चाल नहीं करते हैं तो आप डब्ल्यूटीपी प्रकाशन के आराम को भूल सकते हैं। दूसरों के सुझावों की तरह युद्ध ओवरले का प्रयोग करें। M2eclipse, m2eclipse extras दोनों को स्थापित करना सुनिश्चित करें। हाल ही में जारी एक एक्सटेंशन प्लगइन है, जो आपकी मदद कर सकता है। this blog पर वर्णित। मैंने कोशिश नहीं की, लेकिन ठीक लग रहा है। वैसे भी मेवेन के पास लिंक किए गए फ़ोल्डर्स से कोई लेना देना नहीं है, इसलिए मुझे लगता है कि पहले समाधान और यह मेवेन ओवरले आवश्यक होने पर एक साथ रह सकते हैं।

हेडलेस बिल्ड के लिए आप पहले समाधान के लिए HeadlessEclipse का उपयोग कर सकते हैं। यह अब (मेरे द्वारा) मर चुका है, लेकिन अभी भी काम करता है :)। यदि आप मेवेन ओवरले + ग्रहण सामग्री का उपयोग करते हैं, तो हेडलेस बिल्ड मेवेन द्वारा कवर किए जाते हैं।

12

मैवेन WAR overlay जैसा लगता है कि आप क्या चाहते हैं।

+0

+1 - बिल्कुल। काम पर मेरा मुख्य प्रोजेक्ट इस दृष्टिकोण का उपयोग करता है। –

+0

हालांकि यह ग्रहण के भीतर से काम नहीं करता है। – HDave

+0

maximdim मैं WAR ओवरले का उपयोग करने की कोशिश कर रहा हूं लेकिन इसके साथ ही मैं मूल परियोजना पर संशोधनों की गर्म-तैनाती नहीं कर सकता। जब मैं मूल परियोजना पर कक्षा या स्थैतिक फ़ाइल (.js, .css) को संशोधित करता हूं तो यह तैनात अनुप्रयोग पर प्रतिबिंबित नहीं होता है। मैं netbeans का उपयोग कर रहा हूँ। इस काम को कैसे बनाया जाए इस पर कोई विचार? यह गंभीर रूप से विकास में बाधा डालता है। – Hoffmann

0

यह थोड़ा अधिक शामिल है लेकिन उच्च स्तर पर हम इसे नीचे करते हैं। हमारे पास कोर प्लेटफार्म ui सुविधाओं (लॉगिन-यूई, कैटलॉग-एमजीएमटी-यूई इत्यादि) के आधार पर कई युद्ध मॉड्यूल में विभाजित है। इनमें से प्रत्येक कोर मॉड्यूल ग्राहक के सामने टीम द्वारा अनुकूलन योग्य है।

हम बिल्डिंग समय के दौरान 1 एकल युद्ध मॉड्यूल में इन सभी मॉड्यूल को मर्ज करते हैं। मर्ज नियम मैवेन की असेंबली प्लगइन पर आधारित हैं।

0

आप आमतौर पर जावा स्रोत कोड से शुरू करते हैं। WAR में जावा स्रोत कोड शामिल नहीं है, केवल WEB-INF/classes या JAR के तहत WEB-INF/libs के तहत संकलित कक्षाएं शामिल हैं।

मैं क्या करना होगा क्या Maven का उपयोग करें और इसके साथ एक नया खाली webapp परियोजना शुरू है: http://maven.apache.org/guides/mini/guide-webapp.html

आप नए खाली परियोजना संरचना है के बाद, यह (src/main/java) के लिए जावा स्रोत कोड को कॉपी करें और भरें pom.xml में निर्भरता सूची।

एक बार जब आप यह सब कर लेंगे तो आप mvn clean package का उपयोग मानक WAR फ़ाइल बनाने के लिए कर सकते हैं जिसे आप टॉमकैट पर तैनात कर सकते हैं।

0

आप इंटरफेस के आधार पर प्लगिंग योग्य सुविधाओं के साथ अपने कोर ऐप को डिज़ाइन करना चाहते हैं।

उदाहरण के लिए कहें कि आपके कोर ऐप में User ऑब्जेक्ट की कुछ अवधारणा है और सामान्य उपयोगकर्ता आधारित कार्यों के लिए समर्थन प्रदान करने की आवश्यकता है।UserStore इंटरफ़ेस बनाएं;

public interface UserStore 
{ 
    public User validateUser(String username, String password) throws InvalidUserException; 
    public User getUser(String username); 
    public void addUser(User user); 
    public void deleteUser(User user); 
    public void updateUser(User user); 
    public List<User> listUsers(); 
} 

फिर आप इस इंटरफ़ेस के विरुद्ध अपने कोर ऐप (लॉगऑन तर्क, पंजीकरण तर्क आदि) को कोड कर सकते हैं। आप अपने कोर ऐप में इस इंटरफ़ेस का डिफ़ॉल्ट कार्यान्वयन प्रदान करना चाहेंगे, जैसे कि DatabaseUserStore जो प्रभावी रूप से डीएओ होगा।

फिर आप UserStore को स्प्रिंग बीन के रूप में परिभाषित करते हैं और जहां आवश्यक हो उसे इंजेक्ट करते हैं;

<bean id="userStore" class="com.mycorp.auth.DatabaseUserStore"> 
    <constructor-arg ref="usersDataSource"/> 
</bean> 

यह आपको विशिष्ट ग्राहक की ज़रूरतों के आधार पर कोर ऐप को कस्टमाइज़ या विस्तारित करने की अनुमति देता है। यदि कोई ग्राहक अपने सक्रिय निर्देशिका सर्वर के साथ कोर ऐप को एकीकृत करना चाहता है तो आप LDAPUserStore कक्षा लिखते हैं जो आपके UserStore इंटरफ़ेस को एलडीएपी का उपयोग करके लागू करता है। इसे स्प्रिंग बीन के रूप में कॉन्फ़िगर करें और कस्टम क्लास को एक निर्भर जार के रूप में पैकेज करें।

जो आप के साथ छोड़ा गया है वह एक कोर ऐप है जो हर कोई उपयोग करता है, और ग्राहक विशिष्ट एक्सटेंशन का एक सेट जो आप प्रदान कर सकते हैं और अलग-अलग बेच सकते हैं; बिल्ली, आप ग्राहक को अपने अपने एक्सटेंशन भी लिख सकते हैं।

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