2010-07-09 9 views
6

जावा कम्पाइलर वृद्धिशील निर्माण प्रदान करता है, इसलिए javac चींटी कार्य के रूप में अच्छी तरह से। लेकिन अधिकांश अन्य प्रक्रियाएं नहीं होती हैं।चींटी के साथ सामान्य रूप से आलसी या वृद्धिशील निर्माण को कैसे कॉन्फ़िगर करें?

निर्माण प्रक्रियाओं को ध्यान में रखते हुए, वे फ़ाइलों के कुछ सेट (स्रोत) को फ़ाइलों (लक्ष्य) के दूसरे सेट में बदल देते हैं।

मैं अलग दो यहाँ मामलों कर सकते हैं:

  1. ट्रांसफार्मर नहीं स्रोत फ़ाइलों का एक सबसेट, केवल पूरे सेट ले सकते हैं। यहां हम केवल आलसी बिल्ड बना सकते हैं - यदि स्रोत से कोई भी फाइल संशोधित नहीं की गई - हम प्रसंस्करण को छोड़ देते हैं।
  2. ट्रांसफार्मर स्रोत फ़ाइलों का एक सबसेट ले सकता है और आंशिक परिणाम - वृद्धिशील बिल्ड बना सकता है।

आलसी, वृद्धिशील निर्माण को लागू करने के लिए चींटी आंतरिक, तृतीय-पक्ष एक्सटेंशन या अन्य टूल क्या हैं? क्या आप कुछ व्यापक बिल्डफाइल उदाहरण प्रदान कर सकते हैं?

मुझे विशेष रूप से जीडब्ल्यूटी कंपाइलर के साथ काम करने में दिलचस्पी है।

उत्तर

1

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

+0

लेकिन निश्चित रूप से यह संभव हो सकता है कि कि एक GWT मॉड्यूल के उत्पादन को प्रभावित करता है कोई कोड बदल गया है, और इसलिए मॉड्यूल फिर से संकलन की जरूरत नहीं होगी। आउटपुट को प्रभावित करने वाले परिवर्तन पेड़ –

+0

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

+2

लेकिन अगर कोई जावा स्रोत (जिसका उपयोग जेएस आउटपुट जेनरेट करने के लिए किया जाता है) पिछले संकलन के बाद बदल गया है, तो कुछ भी, अनुकूलन और इनलाइनिंग और कोड हटाने को शामिल करने की कोई आवश्यकता नहीं है ..... –

5

uptodate कार्य इस समस्या का एंट का सामान्य समाधान है। यह ज्यादातर परिस्थितियों में काम करने के लिए काफी लचीला है जहां आलसी या वृद्धिशील संकलन वांछनीय है।

मुझे आपके जैसा ही समस्या थी: मेरे पास मेरे कोड के हिस्से के रूप में एक जीडब्ल्यूटी मॉड्यूल है, और जब मुझे इसकी आवश्यकता नहीं है, तो मैं इसे पुनः संयोजित करने की (भारी!) लागत का भुगतान नहीं करना चाहता हूं। मेरे मामले में समाधान कुछ इस तरह देखा:

<uptodate property="gwtCompile.mymodule.notRequired" 
    targetfile="www/com.example.MyGwtModule/com.example.MyGwtModule.nocache.js"> 
    <srcfiles dir="src" includes="**"/> 
</uptodate> 

<target name="compile-mymodule-gwt" unless="gwtCompile.mymodule.notRequired"> 
    <compile-gwt-module module="com.example.MyGwtModule"/> 
</target> 
संबंधित मुद्दे