2010-07-29 17 views
6

का उपयोग करके फ्लाई पर jaxb.index फ़ाइल कैसे बनाएं, यह एक प्रश्न पूछने के बजाय ज्ञान साझा करने का अधिक है। सोचा कि इस छोटे चींटी स्निपेट किसी के लिए उपयोगी हो सकता है।एंट (या मेवेन)

<target name="create-jaxb-index" depends="compile"> 
    <!-- Create a suitable jaxb.index file on the fly to remove the need for an ObjectFactory 
     jaxb.index is a simple list of the domain objects without package or extension, e.g. 
     org.example.Domain.java -> Domain 
    --> 
    <fileset id="domain-sources" dir="${src}"> 
     <include name="org/example/*.java"/> 
    </fileset> 
    <pathconvert property="domain-list" refid="domain-sources" pathsep="${line.separator}"> 
     <chainedmapper> 
     <flattenmapper/> 
     <globmapper from="*.java" to="*" casesensitive="false"/> 
     </chainedmapper> 
    </pathconvert> 
    <echo file="${target}/classes/org/example/jaxb.index" message="${domain-list}"/> 
    </target> 

ठीक है, ठीक है, तो यह पूरी तरह से जाना नहीं है और सभी पैकेज के नाम तक जमा इतना है कि यह उचित फ़ाइल संरचना को फिर से संगठित कर सकते हैं, लेकिन यह आप आरंभ करने के लिए काफी अच्छा है।

आशा है कि यह मदद करता है।

इसके अलावा, आप सिर्फ इस छोटे से टुकड़ा (कम लक्ष्य तत्व) एक Maven में सम्मिलित कर सकता है इस तरह का निर्माण:

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
     <phase>compile</phase> 
     <configuration> 
      <tasks> 
       <!-- Create a suitable jaxb.index file on the fly to remove the need for an ObjectFactory 
        jaxb.index is a simple list of the domain objects without package or extension, e.g. 
        org.example.Domain.java -> Domain 
       --> 
       <fileset id="domain-sources" dir="${build.sourceDirectory}"> 
       <include name="org/example/domain/*.java"/> 
       </fileset> 
       <pathconvert property="domain-list" refid="domain-sources" pathsep="${line.separator}"> 
       <chainedmapper> 
        <flattenmapper/> 
        <globmapper from="*.java" to="*" casesensitive="false"/> 
       </chainedmapper> 
       </pathconvert> 
       <echo file="${build.outputDirectory}/org/example/domain/jaxb.index" message="${domain-list}"/> 
      </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
+0

धन्यवाद, यह उपयोगी है! यदि आप ढांचे के इच्छित दायरे से एक बालों से बाहर निकलते हैं, तो आप क्विर्क और हैक के नरक में प्रवेश करते हैं। कभी-कभी मुझे लगता है कि मैं जावा, मेवेन, ग्रोवी इत्यादि के बारे में थक गया हूं – boumbh

+0

@boumbh मदद करने के लिए खुशी हुई। वेब विकास की जबरदस्त जटिलता को कम करने का एक तरीका अन्य भाषाओं को आजमा देना है। –

+0

अगर केवल मेरे पास ^^ था। मैं आजकल नट्स क्रैकिंग के लिए स्लेजहैमर का उपयोग करने की प्रवृत्ति को नोट करता हूं। जेएक्सबी एक बहुत ही कुशल स्लेजहैमर है, यह मेरे नट्स को बहुत अच्छी तरह से क्रैक करता है (नकारात्मक अर्थ के बिना), लेकिन कभी-कभी मुझे एक सरल उपकरण की आसान हैंडलिंग याद आती है। समस्याग्रस्त एक अन्य भाषा का उपयोग कर अलग-अलग होता। जरूरी नहीं है। जैसा कि कुछ कहते हैं: "एक बुरा कार्यकर्ता हमेशा अपने औजारों को दोषी ठहराता है। एक अच्छे कार्यकर्ता के पास सही उपकरण होते हैं।" अगर मैं अपने टूल्स का चयन नहीं कर सकता, तो यह मुझे एक खराब कार्यकर्ता बनाता है। – boumbh

उत्तर

2

गैरी के उदाहरण के बाद, मैंने इसे लिया और इसे बढ़ाया ताकि यह एक से अधिक पैकेज निर्देशिका के लिए काम करे। जैसा कि आप देख सकते हैं किसी भी तरह से

<target> 
    <taskdef resource="net/sf/antcontrib/antlib.xml" classpathref="maven.dependency.classpath" /> 
    <for param="dto-dir"> 
     <path> 
      <dirset dir="${basedir}/src/main/java"> 
       <include name="com/example/**/dto"/> 
      </dirset> 
     </path> 
     <sequential> 
      <property name="@{dto-dir}" basedir="${basedir}/src/main/java" relative="true" location="@{dto-dir}" /> 
      <echo message="Creating jaxb.index file for directory: ${@{dto-dir}}" /> 
      <echo message="@{dto-dir}" /> 
      <fileset id="@{dto-dir}_dtos" dir="@{dto-dir}"> 
       <include name="*Dto.java" /> 
      </fileset> 
      <pathconvert property="@{dto-dir}_contents" refid="@{dto-dir}_dtos" pathsep="${line.separator}"> 
       <chainedmapper> 
        <flattenmapper /> 
        <globmapper from="*.java" to="*" casesensitive="false" /> 
       </chainedmapper> 
      </pathconvert> 
      <echo file="${project.build.outputDirectory}/${@{dto-dir}}/jaxb.index" message="${@{dto-dir}_contents}" />        
     </sequential> 
    </for> 
</target> 

मैं एक चींटी विशेषज्ञ नहीं हूँ, और मैं अद्वितीय संपत्ति के नाम बनाने के लिए कुछ अजीब सामान करना पड़ा,: निम्नलिखित अपने प्लगइन के निर्भरता में अगर आप antcontrib निर्भरता काम करना चाहिए लेकिन यह मेरे लिए काम कर गया।