2010-03-02 13 views
8

एक प्रयोग के रूप में हम ग्रहण जावा कंपेलर (ecj-3.5.jar से eclipse.org से डाउनलोड) का उपयोग करके हमारे उत्पादों को बनाना चाहते हैं, जेडीके के बजाए जावा 6 के रनटाइम संस्करण पर , और जैसा कि मैं इसे समझता हूं, यह जार को चींटी क्लासपाथ में जोड़ने और एडाप्टर को इंगित करने के लिए build.compiler प्रॉपर्टी को सेट करने का विषय है।ग्रहण कंपाइलर को पूरी तरह से _within_ build.xml

<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" /> 
मेरी build.xml में

सहित और एक JRE साथ चींटी लागू करके, मैं उम्मीद त्रुटि है कि अनुकूलक नहीं पाया जा सकता है मिलता है, और में classpath को ECJ-3.5.jar जोड़कर ग्रहण पैनल मैं उम्मीद के अनुसार अपने कोड संकलित कर सकते हैं। मेरा मानना ​​है कि एक ही कार्यक्षमता आधुनिक चींटियों के साथ कमांड लाइन से "-lib foo.jar" के साथ उपलब्ध है।

अब, मैं से build.xml के भीतर निर्दिष्ट करना चाहता हूं कि मैं अपने क्लासपाथ पर ecj-3.5.jar चाहता हूं जैसा उपर्युक्त है। हम पहले से ही चींटी कार्यों के साथ ऐसा कर सकते हैं, इसलिए मेरा मानना ​​है कि यह संभव है।

तो सवाल यह है कि मैं कंपाइलर केवल को build.xml के भीतर से खोजने के लिए जावैक द्वारा उपयोग किए गए क्लासपाथ में कैसे जोड़ सकता हूं?


ऐसा लगता है कि आगामी ant4eclipse 1.0 ग्रहण संकलक भी शामिल है (जो है जो मैं के लिए इसका उपयोग करना चाहता था), कि के उन्नयन (0.5 से) द्वारा ऐसा समस्या हमारे पास हल करना चाहिए।


2010-09-24: रिलीज होने पर संकेत के बिना Ant4Eclipse अभी भी एम 4 पर है।


2011-12-01: अब हम चींटी से मैवेन में स्थानांतरित हो गए हैं। Build.xml स्क्रिप्ट्स ने जटिलता दीवार को मारा और एक ताजा दृष्टिकोण की आवश्यकता थी। किसी को भी क्या करना है चुनने के लिए की आवश्यकता होगी, - तुच्छ परियोजनाओं के अलावा ant4eclipse पथ नहीं जाते।


2012-11-30: एक साल बाद, मेवेन अनुभव अभी भी अधिक अच्छा है। वहाँ quirks और मानसिकता में परिवर्तन का एक बहुत कुछ है, लेकिन सबसे अधिक संदर्भ के अनुसार सार्थक। मेवेन व्यक्तिगत परियोजनाओं पर आसानी से कंपाइलर स्तर निर्दिष्ट कर सकते हैं। हम बजाय (कई कारणों से) ECJ javac का उपयोग कर जांच कर रहे हैं लेकिन सबसे प्रयोजनों के लिए javac अच्छी तरह से काम करता है।

उत्तर

11

जावैक का उपयोग करते समय घटक घटक के संदर्भ को निर्दिष्ट करने का एक तरीका है।

<componentdef name="ecj" 
       classname="org.eclipse.jdt.core.JDTCompilerAdapter" 
       classpath="ecj-3.7.1.jar" /> 

<javac ....> 
    <ecj/> 
</javac> 

एक अन्य विकल्प आपके पास या javac के लिए संकलक विशेषता और फिर javac के लिए एक compilerclasspath द्वारा बताए गए अनुसार build.compiler स्थापित करने के लिए है। यह आपके सामान्य कंपाइलर एडाप्टर को लोड करने के लिए क्लासपाथ को पकड़ने के लिए संरचना जैसे सामान्य पथ है।

<javac compiler="org.eclipse.jdt.core.JDTCompilerAdapter" ....> 
    <compilerclasspath> 
    ... 
    </compilerclasspath> 
</javac> 

अधिक जानकारी के लिए चींटी के मैनुअल में javac task दस्तावेज़ देखें। ध्यान दें कि ये दोनों समाधान केवल एंटी 1.8 से ही काम करते हैं।

+0

ग्रहण 3.5 (शायद 1.7) के साथ भेजे गए चींटी के साथ मुझे "समस्या: कार्य बनाने में विफल या घटकdef टाइप करें"। एक और त्रुटि संदेश क्लासपाथ चींटी 1.8 से संबंधित है, लेकिन मैं वास्तव में अंदर ग्रहण से काम कर रहे समाधान की सराहना करता हूं। –

+0

मैंने एंट 1.8 के लिए एक और विकल्प जोड़ा लेकिन यह नहीं देखते कि आप इसे 1.7 – Mark

1

पढ़ना Running Ant via Java। मुझे लगता है कि आप एक सरल आवरण है जो ठीक से एक classpath सेट और जिसके परिणामस्वरूप वर्ग पथ के लिए अपने जार फ़ाइल जोड़ना होगा लिख ​​सकते हैं।

यहाँ मैं सिर्फ काटने हूँ और पुस्तकालय है कि आप classpath को में रुचि रखते हैं के अलावा के साथ ऊपर के लिंक से नमूना चिपकाने:

<java 
     classname="org.apache.tools.ant.launch.Launcher" 
     fork="true" 
     failonerror="true" 
     dir="${sub.builddir}" 
     timeout="4000000" 
     taskname="startAnt" 
> 
    <classpath> 
     <pathelement location="${ant.home}/lib/ant-launcher.jar"/> 
     <pathelement location="/path/to/ecj-3.5.jar"/> 
    </classpath> 
    <arg value="-buildfile"/> 
    <arg file="${sub.buildfile}"/> 
    <arg value="-Dthis=this"/> 
    <arg value="-Dthat=that"/> 
    <arg value="-Dbasedir=${sub.builddir}"/> 
    <arg value="-Dthe.other=the.other"/> 
    <arg value="${sub.target}"/> 
</java> 

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

+0

के साथ कैसे कर सकते हैं, आप एक संशोधित क्लासपाथ के साथ चींटी को फिर से लॉन्च करने का सुझाव दे रहे हैं। मैं वास्तव में relaunch कदम से बचने के लिए होगा। –