2012-01-22 9 views
7

तो मेरे पास एक वसंत एमवीसी वेब एप्लिकेशन है जिसे मैंने इंटेलिज 9 में बनाया, मैवेन का उपयोग करके।मेरी कक्षाओं को .jar में कैसे पैकेज करें, और फिर भी युद्ध के रूप में पैकेज करें?

जब मैं चलाने के एक:

mvn clean install 

यह दोनों एक .war फ़ाइल और एक विस्फोट युद्ध में सब कुछ पैकेज।

मेरा प्रोजेक्ट लेआउट एक मेवेन सरल वेब ऐप आर्क प्रकार का उपयोग कर रहा है।

How can I have my classes compiled into a .jar file also? 

वर्तमान में मेरे वर्ग हैं में:

myapp-1.0.jar 

और वह मेरी /target/myapp/WEB-INF/lib फ़ोल्डर में इस है:

/target/myapp/WEB-INF/classes/ 

यह .jar की तरह में अपने कोड को संकलित करने के लिए क्या मैं चाहता हूँ है मेरे सभी अन्य जार की तरह।

अद्यतन

मैं इस Maven के माध्यम से किया है, न कि विशिष्ट IntelliJ चाहते हैं।

+0

तो वेब-आईएनएफ/कक्षा में एक जार के रूप में वेब-आईएनएफ/कक्षाओं में परियोजना के वर्गों के साथ समस्या क्या है? – khmarbaise

+0

एक के लिए, कुछ (परीक्षण) इंजीनियरों अक्सर कक्षाओं को अपडेट करना भूल जाते हैं जब आप उन्हें अपने स्थापित वेबपैप को नए कोड (इसलिए कॉन्फ़िगर रखना) के साथ अपग्रेड करने के लिए कहते हैं। Lib निर्देशिका में सभी कोड होना आसान है। – AndrewBourgeois

+0

@ ब्लैंकमैन मैंने वेब एप्लिकेशन को obfuscating के बारे में SO पर अपने प्रश्न पढ़े। क्या आप जिस प्रक्रिया का पालन करते हैं या कुछ विन्यास फाइलें प्रदान कर सकते हैं? मैं एक obfuscated जार और एक युद्ध उत्पन्न करने में सक्षम हूँ (obfuscation के बिना)। लेकिन मैं ओबीएफ के साथ एक युद्ध उत्पन्न करना चाहता हूँ। इसमें जार – phoenix

उत्तर

2

आप आसानी से दो कलाकृतियों - एक जार और एक युद्ध बना सकते हैं।

मुझे यकीन नहीं है कि वेब-आईएनएफ/कक्षाओं के विपरीत एक जेएआर में आपकी .class फ़ाइलों का लाभ क्या है। दोनों संपीड़ित हैं; जेएआर एक अतिरिक्त संपीड़न प्रदान नहीं करेगा। आप अन्य अनुप्रयोगों में उन .class फ़ाइलों का पुन: उपयोग करना चाह सकते हैं। यदि ऐसा है, तो आप उन जावा कक्षाओं को एक अलग मॉड्यूल में ले जाने और आपके द्वारा बनाई गई जेएआर फ़ाइल को जोड़ने पर विचार कर सकते हैं जैसे कि आप अपनी WAR फ़ाइल में किसी भी अन्य तृतीय पक्ष JAR को जोड़ सकते हैं। अन्य अनुप्रयोग आसानी से आपके भंडार से जेएआर फ़ाइल को जांचने में सक्षम होंगे और बस इसका पुन: उपयोग करेंगे। साझा की गई कक्षाओं को आपके संस्करण नियंत्रण प्रणाली में एक अलग भंडार में स्थानांतरित करके यह व्यवस्था सबसे अच्छी तरह से की जाती है।

+1

मैं ऐसा कर रहा हूं क्योंकि प्रोजेगार्ड चलाने के लिए यह स्पष्ट रूप से आवश्यक है। – Blankman

+0

वैसे मैं इसे मैवेन का उपयोग करके करना चाहता हूं, इसलिए मैं w/o intellij बना सकता हूं। – Blankman

+0

जैसा कि डफिमो ने कहा, दो मेवेन कलाकृतियों का निर्माण करने का तरीका है: जार आर्टिफैक्ट की निर्भरता के साथ, एक जार आर्टिफैक्ट, जिसमें कक्षाएं और एक युद्ध आर्टिफैक्ट शामिल है। ध्यान दें कि आपके वर्गों की निर्भरताओं को युद्ध परियोजना के pom.xml से जार प्रोजेक्ट में स्थानांतरित करने की आवश्यकता है। –

-2

पैकेजिंग प्रकार, pom.xml (आम तौर पर काफी फ़ाइल के शीर्ष पर रखा में "पैकेजिंग" टैग द्वारा निर्दिष्ट किया जाता है एक साथ विरूपण साक्ष्य आईडी के साथ, इस परियोजना के संस्करण आदि।

पता लगाने का प्रयास
<packaging>war</packaging> 
pom.xml में

और आपके कंसोल में

<packaging>jar</packaging> 
-2

ठीक लिखने एक जावा आदेश के लिए इसे बदल

0,123,

जार सीवीएफ myapp-1.0.jar * .class

+1

क्या आपने मेवेन के बारे में सुना था? सवाल सावधानी से पढ़ें! – panagdu

0

यह बिल्कुल स्पष्ट नहीं है कि एक जार के रूप में एक तार की सामग्री को पैक करने के लिए संभवतः क्या लाभ हो सकता है। वेबपैप लागू करने वाला कोड इस संदर्भ के बिना काम नहीं करेगा कि एक डब्ल्यूएआर तैनात किया गया है।

यह कहा गया है कि, यह आपके कोड के कार्यात्मक कोर को एक अलग मेवेन मॉड्यूल में निकालने के संदर्भ में सोचने के लिए पूरी तरह व्यावहारिक है जिसमें जार पैकेजिंग और एक अच्छा जावा एपीआई है। फिर आपके डब्ल्यूएआर मॉड्यूल को उस पर निर्भर करने के लिए बनाया जा सकता है, और उस जावा एपीआई को वेब-आधारित एपीआई में बदलने के लिए केवल कोड को सही करने की आवश्यकता है।इसका लाभ यह है कि यह आपके कोड की जांच करने की क्षमता में भी काफी सुधार करेगा (जेएआर के खिलाफ परीक्षण निश्चित रूप से आसान होगा) और आपको उसी अंतर्निहित कोड के अन्य ग्राहकों के संदर्भ में सोचने की अनुमति देता है। वह आपको रूचि दे सकता है या नहीं। क्या आपको किसी भी जावा कोड सीधे WAR में चाहिए? शायद शायद नहीं। सब के बाद यह करने के लिए कई तरीके हैं ...

+0

_same_ Maven मॉड्यूल से एक जार और एक WAR बनाना सिर्फ एक बुरा विचार है। ऐसा मत करो जिम्मेदारियों के क्लीनर अलगाव सोचो। –

0

सरल उपाय युद्ध प्लगइन के लिए विन्यास में है:

<attachClasses>true</attachClasses> 

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

+0

यदि आप वास्तव में एक अलग जार बनाना चाहते हैं और एक अलग युद्ध फ़ाइल बनाना चाहते हैं जिसमें जार (वेब-आईएनएफ/lib) शामिल है, तो आपको जार के साथ एक अलग परियोजनाएं बनाना होगा और एक युद्ध कोड के साथ एक जार की निर्भरता होगी । – khmarbaise

0

Runninng

mvn jar:jar install 

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

तो आपको बस उस पंक्ति को अलग से चलाने की आवश्यकता है, इसे स्क्रिप्ट में जोड़ें या jar:jar अपने मौजूदा मेवेन बिल्ड में लक्ष्य जोड़ें।

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

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