2010-02-13 15 views
6

मैंने विभिन्न उदाहरणों का एक गुच्छा देखा है, और कई बदलावों की कोशिश की है, लेकिन ऐसा लगता है कि यह सही तरीके से काम नहीं कर रहा है। यह भी प्रतीत होता है कि आप javac के साथ एक संपूर्ण निर्देशिका को बाहर नहीं कर सकते हैं, लेकिन केवल फाइलें, जो मुझे लगता है कि आप एक पैकेज निर्दिष्ट नहीं कर सकते हैं? यहां मेरे पास है:चींटी में javac का उपयोग कर स्रोत पैकेज को कैसे बाहर निकालना है?

<javac srcdir="src" destdir="WEB-INF/classes" excludes="path/to/excluded/package/*.java"> 
    <classpath refid="compile.classpath"/> <!-- reference defined earlier --> 
</javac> 

उत्तर

11

आप "**" के साथ संपूर्ण निर्देशिका या निर्देशिका पेड़ को बहिष्कृत कर सकते हैं और बहिष्कृत कर सकते हैं। उदाहरण

<dirset dir="aDirectory"> 
    <include name="a/package/**"/> 
    <exclude name="**/package/to/exclude**"/> 
</dirset> 
+0

नेस्टेड dirset javac कार्य के साथ काम नहीं करता। –

+0

ठीक है, लेकिन क्लासपाथ के हिस्से के रूप में जो जावैक कार्य में संदर्भ हैं, उन्हें काम करना चाहिए। – akr

5

कृपया ध्यान दें कि शामिल नहीं करता है, तो "src" में फ़ाइलों के किसी भी काम नहीं करता है (या में "भी शामिल है" अगर निर्दिष्ट) शामिल नहीं में निर्दिष्ट फ़ाइलों में निर्भरता है। तो सबसे पहले यह सुनिश्चित करें कि बहिष्कृत फाइलों में से किसी भी फाइल में शामिल नहीं है।

1

javac काम implicity srcdir में सभी फाइलों शामिल है और आप सिर्फ एक काम करने के लिए तत्व को बाहर जोड़ सकते हैं, उदाहरण के लिए:

<javac destdir="build" srcdir="src" > 
    <exclude name="**/my/package/test/*.java" /> 
</javac> 

यह my.package.test पैकेज में कक्षाओं में से किसी को संकलित नहीं होता।

+2

समस्या यह है कि जब उस पैकेज से एक और वर्ग आयात करता है, तो संकलक उस फ़ाइल में खींचता है, भले ही यह इसे बाहर करने के लिए कहता है। पूरी चीज़ों को शामिल/बहिष्कृत करना केवल प्रारंभिक सेट है जो जावैक को खिलाया जाता है। जावा डेर (एस) के आधार पर जावैक अन्य फाइलों को खींचने के लिए स्वतंत्र है। स्पष्ट रूप से कुछ फ़ाइलों तक पहुंचने के लिए जावैक को बताने की आवश्यकता नहीं है। मुझे लगता है कि यह केवल उन फ़ाइलों को कॉपी करके किया जा सकता है जिन्हें आप javac को देना चाहते हैं, और उसके बाद उस उप-सेट को संकलित करें। – Mike

+2

यह उपयोगी है जहां आपके पास एक पैकेज है जिसमें कोई अन्य कोड निर्भर नहीं है - जैसे परीक्षण कक्षाएं - जिन्हें तैनात नहीं किया जाना चाहिए। –

0

माइक, एक और तरीका है javac बताने के लिए करने के लिए स्पष्ट रूप से कुछ फ़ाइलों तक पहुँच नहीं करने के लिए सेट नहीं sourcepath है। मैं सिर्फ यह सोचा बाहर ...

चींटी मैनुअल से:

नोट: यदि आप, एकमात्र स्रोत एक आम जड़ नीचे कुछ संकुल में स्थित फ़ाइलें संकलन का उपयोग शामिल/विशेषताओं बाहर रखना चाहते हैं, तो या इन पैकेजों के लिए फ़िल्टर करने के लिए /नेस्टेड तत्व। में srcdir विशेषता (या नेस्टेड तत्व) में अपनी पैकेज संरचना का हिस्सा शामिल नहीं है, या एंटी आपके संकलन लक्ष्य को चलाने के दौरान प्रत्येक आपकी स्रोत फ़ाइलों को पुन: संकलित करेगा। अतिरिक्त जानकारी के लिए चींटी अकसर किये गए सवाल देखें।

आप स्पष्ट रूप से निर्दिष्ट केवल फ़ाइलें संकलन और अक्षम javac के डिफ़ॉल्ट खोज तंत्र करना चाहते हैं तो आप sourcepath विशेषता अनसेट कर सकते हैं:

<javac sourcepath="" srcdir="${src}" destdir="${build}" > 
    <include name="**/*.java"/> 
    <exclude name="**/Example.java"/> 
</javac> 

इस तरह javac सभी जावा स्रोत फ़ाइलें संकलन होगा "$ {src}" निर्देशिका के अंतर्गत लेकिन उदाहरण छोड़ें। संकलक त्रुटियों का भी उत्पादन करेगा यदि कुछ गैर-उदाहरण फाइलें उन्हें संदर्भित करती हैं।