2011-10-14 8 views
14

मेरी दुविधा यह है कि मुझे मेवेन में जेनरेट की गई स्रोत फ़ाइलों के बारे में संदेह है।मेवेन - जेनरेटेड कक्षाओं को कैसे संभालें

मैं डब्ल्यूएसडीएल से कुछ कक्षाएं उत्पन्न करने की कोशिश कर रहा हूं और मुझे नहीं पता कि परिणामस्वरूप स्रोत फ़ाइलों को संभालने का मानक तरीका क्या है।

  • मुझे .java स्रोत फ़ाइलों को कहां उत्पन्न करना चाहिए? (Src/मुख्य/जावा, src/मुख्य/उत्पन्न)
  • मैं उन्हें स्रोत नियंत्रण में शामिल करना चाहिए, या जाने मैं src/मुख्य/जावा फ़ोल्डर का उपयोग नहीं करते हैं तो उनके पीछे से चेक आउट
  • उत्पन्न हो, ईक्लीप्स को स्वचालित रूप से उन वर्गों को स्रोत फ़ोल्डर के रूप में "देखने" के लिए कैसे मनाने के लिए?
  • क्या मुझे वास्तव में .java फ़ाइलों की आवश्यकता है, या केवल .class-es?

इस मुद्दे के बारे में सर्वोत्तम अभ्यास क्या हैं? किसी भी मदद या सलाह की सराहना की है।

अपनी तरह के जवाब के लिए धन्यवाद, मार्क

उत्तर

10

Maven प्लगइन्स मुझे लगता है कि उत्पन्न कोड का सामना करना पड़ा से अधिकांश target/generated-sources फ़ोल्डर की एक उप-निर्देशिका में उत्पन्न जावा स्रोत फ़ाइलों को रखने के एक सम्मेलन का पालन करें। उदाहरण के लिए, Maven 2 JAXB 2.x Plugin जावा स्रोतों को target/generated-sources/xjc फ़ोल्डर में उत्पन्न करता है।

जब तक निर्माण दोहराने योग्य है, मुझे जेनरेट किए गए स्रोतों को मेरे स्रोत कोड भंडार में प्रतिबद्ध करने की आवश्यकता नहीं दिखाई देती है। इसलिए मैं आमतौर पर , Mercurial, SVN या जो भी मैं उपयोग कर रहा हूं उसे target के तहत सब कुछ अनदेखा करने के लिए कॉन्फ़िगर कर रहा हूं।

मैं आमतौर पर मैन्युअल Eclipse के लिए स्रोत फ़ोल्डर शामिल करने के लिए .classpath फ़ाइल को संपादित और मैं स्रोत कोड भंडार में दोनों .classpath और .project फ़ाइलों को स्टोर।

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/> 
    <classpathentry kind="src" path="target/generated-sources/xjc"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> 
    <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> 
    <classpathentry kind="output" path="target/classes"/> 
</classpath> 

यह ध्यान रखें कि कुछ Maven प्लगइन्स पोम करने के लिए उत्पन्न सूत्रों देते नहीं है महत्वपूर्ण है:

यहाँ एक उदाहरण है। आप इसे आने के लिए Build Helper Maven Plugin का उपयोग कर सकते हैं।

3

मुझे परिणामस्वरूप स्रोत फ़ाइलों को संभालने का एक मानक तरीका कभी नहीं मिला। हालांकि, मेरे अनुभव के आधार पर मैं तुम्हें सिफारिश करेंगे निम्नलिखित:

  • मैं कहाँ जावा स्रोत फ़ाइलें उत्पन्न करनी चाहिए? (Src/मुख्य/जावा, src/मुख्य/उत्पन्न)
  • मैं उन्हें src/मुख्य/com/mypackage/उत्पन्न तहत डाल दिया। इस तरह, वे पहले से ही क्लासपाथ में हैं और त्रुटियों के बिना एक्लिप्स संकलन करने के लिए आपको किसी भी अन्य मैन्युअल कॉन्फ़िगरेशन की आवश्यकता नहीं होगी।
  • मैं उन्हें स्रोत नियंत्रण में शामिल करना चाहिए, या जाने के लिए उन्हें उत्पन्न किया जा के बाद से चेक आउट
  • मैं के लिए इस्तेमाल किया उन्हें शामिल नहीं, लेकिन कुछ मुद्दों के बाद (डेवलपर्स उन्हें उत्पन्न नहीं कर रहे हैं क्योंकि वे भूल गए हैं, आईडीई मेवेन प्लगइन की कमी, आदि) हम उन्हें स्रोत नियंत्रण में जोड़ते हैं। यह किसी को भी यह जानने में मदद करता है कि जेनरेट किए गए स्रोतों का एक पैकेज है जो जादुई रूप से दिखाई नहीं दे रहा है, तुरंत एक फ़ोल्डर की खोज करके स्कीमा परिवर्तनों की जांच करें (कुछ स्रोत फाइलें अब मौजूद नहीं हैं) और ऐप के असली आकार को देखें
  • मैं src/मुख्य/जावा फ़ोल्डर का उपयोग नहीं करते हैं, कैसे ग्रहण स्वचालित रूप से "देख" उन स्रोत फ़ोल्डर के रूप में वर्गों के लिए समझाने के लिए?
  • का उपयोग कर src/मुख्य/com/mypackage/उत्पन्न द्वारा हल।
  • मैं वास्तव में जावा फ़ाइलें, या केवल .class-एस की ज़रूरत है?
  • मैं जावा फ़ाइलों का उपयोग करने के लिए सुझाव है।

जेएक्सबी का उपयोग करने के वर्षों के बाद, मेरे दो सेंट, मुख्य रूप से डब्लूएसडीएल के लिए जावा पीढ़ी के लिए।

0

यहां कई सालों के बाद मेरी सिफारिश है: अपनी सभी कोड पीढ़ी को एक अलग मेवेन प्रोजेक्ट में रखें और अपनी सामान्य परियोजनाओं में उस पर निर्भर करें जिसके लिए जेनरेट कोड की आवश्यकता है।

  • अपने उत्पन्न कोड के लिए एक mvn install करो अगर यह स्नैपशॉट है।
  • जब तक आप जानते हैं कि आप क्या कर रहे हैं मैं एक submodule में उत्पन्न कोड डालने की सलाह नहीं देते अन्यथा ग्रहण लगातार भ्रमित हो जाएगा, क्योंकि ज्यादातर लोगों को सभी submodules (यानी multimodule परियोजना)
  • हालांकि तुम क्या करने का फैसला करते हैं आयात multimodule (यानी उत्पन्न कोड एक भाई परियोजना है) आप या तो:
    • विशेष रूप से ग्रहण में परियोजना आयात नहीं और व्यक्तिगत परियोजना
    • m2e जीवन चक्र प्लगइन्स पर भरोसा हेल्पर प्लगइन का निर्माण पर mvn install का उपयोग (यह केवल अच्छी तरह से काम कुछ कोड पीढ़ी पर है भारी समर्थित)।
  • यदि आपको जेनरेट कोड को डीबग करने की आवश्यकता है तो मैं maven-attach-sources प्लगइन के साथ जार को स्रोत संलग्न करने की अत्यधिक अनुशंसा करता हूं।

जबकि मल्टीमुड्यूल दृष्टिकोण अभ्यास में एक अच्छा विचार प्रतीत होता है, यह वास्तव में परेशान हो रहा है क्योंकि जब भी कोई नया स्नैपशॉट होता है तो ग्रहण हर बार सिंक हो जाएगा।

यदि आपका जेनरेट कोड उत्पन्न नहीं होता है तो अक्सर इसे छोड़ दें, इसलिए यह एक स्नैपशॉट नहीं है (जाहिर है कि इसे उचित मेवेन रिपोजिटरी सेटअप की आवश्यकता है)।

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