मैं एक समाधान है कि एक जार एक निर्देशिका में हमारे पुन: प्रयोज्य निर्माण लिपियों युक्त फ़ाइल बनाता है बाहर काम किया है, कहते हैं कि com/उदाहरण/चींटी/sharedbuild, जो चींटी 1.8 में आयात किया जा सकता:
<project>
<import>
<javaresource name="com/example/ant/sharedbuild/java.xml">
<classpath location="../../../../target/ant-shared-build.jar" />
</javaresource>
</import>
</project>
मेरे मामले में यह परियोजना के लिए जावा-आधारित निर्माण करने के लिए सभी "सार्वजनिक" लक्ष्यों को परिभाषित करता है।
वाक्यविन्यास एक छोटा वर्बोज़ है, विशेष रूप से जब मैं अधिक से अधिक फ़ाइलों को शामिल करता हूं (कहें, ओएसजीआई जार बनाने की क्षमता जोड़ने के लिए)। एक antlib.xml जोड़कर जिसमें एक मैक्रोडफ़ और स्क्रिप्टडेफ़ का जार फ़ाइल (साझा बिल्ड स्क्रिप्ट के समान निर्देशिका में) का संयोजन होता है, बिल्ड फ़ाइल अब इस तरह दिख सकती है (और अब ओएसजीआई जार बंडल भी बना रही है):
<project xmlns:build="antlib:com.example.ant.sharedbuild">
<taskdef uri="antlib:com.example.ant.sharedbuild"
classpath="../../../../target/ant-shared-build.jar" />
<build:build using="java, jar, bundle" />
</project>
दुर्भाग्य से, मैं macrodef या scriptdef में कोड साझा कर सकते हैं नहीं है, लेकिन वास्तव में यह कठिन नहीं है: विशेषता और प्रत्येक पर पाश का उपयोग कर पार्स करने के लिए एक छोटे से जावास्क्रिप्ट, इसमें से एक फ़ाइल नाम निकाले जाते हैं, और आयात करें।
मैं अपने हार्ड ड्राइव पर एक निश्चित स्थान (मेरे प्रोजेक्ट के सापेक्ष) में जार फ़ाइल का संदर्भ देता हूं। मुझे लगता है कि हम बेहतर कर सकते हैं। आदर्श रूप से, मैं एक केंद्रीय संस्करण से एक (संस्करण!) जार फ़ाइल लाने के लिए चाहता हूँ। जब से हम पहले से ही आइवी का उपयोग कर रहे (एक HTTP भंडार के साथ) हम जार फ़ाइल वहाँ (फिर से, एक संस्करण के साथ) प्रकाशित कर सकते हैं और वहां से सीधे यह लाने:
<project xmlns:build="antlib:com.example.ant.sharedbuild">
<property name="ant.shared.build.jar.file"
location="${user.home}/ant/ant-shared-build-1.5.3.jar" />
<get src="http://repo.example.com/.../ant-shared-build-1.5.3.jar"
dest="${ant.shared.build.jar.file}"
skipexisting="true" />
<taskdef uri="antlib:com.example.ant.sharedbuild"
classpath="${ant.shared.build.jar.file}" />
<build:build using="java, jar, bundle" />
</project>
इस के साथ कुछ समस्याएं हैं:
- इसे फिर से वर्बोज़ मिल रहा है।
- प्रत्येक build.xml के लिए शब्दशः दोहराया जाता है।
- बहुत बार बार-बार बॉयलरप्लेट है, खासकर संस्करण संख्या।
इन समस्याओं को कम करने के लिए, build.xml युक्त प्रत्येक निर्देशिका में मेरे पास bootstrap.xml भी है (नाम वास्तव में कोई फर्क नहीं पड़ता)। प्रत्येक निर्माण।एक्सएमएल फिर इस फ़ाइल में शामिल हैं:
<project xmlns:build="antlib:com.example.ant.sharedbuild">
<include file="bootstrap.xml" />
<build:build using="java, jar, bundle" />
</project>
प्रत्येक bootstrap.xml, कम से कम, यह माता पिता की bootstrap.xml है शामिल हैं:
<project>
<include file="../bootstrap.xml" />
</project>
उच्च-स्तरीय bootstrap.xml (रूट), तो करता है जार फ़ाइल हो रही है और कस्टम कार्य बनाने, जैसा कि ऊपर के काम:
<project>
<property name="ant.shared.build.version"
value="1.5.3" />
<property name="ant.shared.build.jar.filename"
value="ant-shared-build-${ant.shared.build.version}.jar" />
<property name="ant.shared.build.jar.file"
location="${user.home}/ant/${ant.shared.build.jar.filename}" />
<get src="http://repo.example.com/.../${ant.shared.build.jar.filename}"
dest="${ant.shared.build.jar.file}"
skipexisting="true" />
<taskdef uri="antlib:com.example.ant.sharedbuild"
classpath="${ant.shared.build.jar.file}" />
</project>
सीधे प्रश्न से संबंधित नहीं हालांकि, मैं वास्तव में macrodef दोबारा काम कर रहा हूँ और एक कस्टम चींटी कार्य में scriptdef, क्योंकि मैं एक वाक्य रचना कि इस तरह दिखता है समर्थन करने के लिए सक्षम होना चाहते हैं:
<project xmlns:build="antlib:com.example.ant.sharedbuild">
<include file="bootstrap.xml" />
<build:build>
<using>
<java />
<bundle>
<manifest>
Import-Package: *,org.joda.time;version="[1.6.0,1.6.0]"
Bundle-Activator: com.example.time.impl.Activator
</manifest>
</bundle>
</using>
</build:build>
</project>
मैं कहना चाहिए सिर्फ एक पुनर्वितरण का निर्माण बनाने का मतलब यह नहीं है कि यह उपयोगी हो जा रहा है। आपको अभी भी समान विशेषताओं के डिज़ाइन के साथ एक समेकित, मॉड्यूलर, लगातार कार्यान्वयन बनाने के लिए समय और प्रयास करने की आवश्यकता है। यह अधिक महत्वपूर्ण है क्योंकि आपको परियोजनाओं में, टीमों में, संगठनात्मक सीमाओं आदि में स्क्रिप्ट साझा करने की आवश्यकता है।
निष्कर्ष में, एक संस्करण संख्या के साथ एक जार फ़ाइल बनाकर, जिसे एक विशिष्ट फ़ाइल स्थान से स्वतंत्र वितरित किया जा सकता है या एक एससीएम उपकरण हम वास्तविक साझा कर सकते हैं लेकिन पुनरुत्पादित बनाता है।
बहुत बहुत धन्यवाद! मैं गलत काम में देख रहा था। कोई आश्चर्य नहीं कि मुझे यह नहीं मिला। उदाहरणों के कुछ लिंक बहुत मददगार होंगे: यदि आपके कुछ अच्छे हैं तो निःशुल्क महसूस करें। – nrobey
यदि आप दोहराने योग्य बिल्ड करना चाहते हैं तो यह एक बुरा विचार है। –
@ डोमिनिक मिशेल - अच्छा बिंदु। यदि common_directive.xml स्थिर नहीं है, तो उस निर्भरता को थोड़ा बेहतर प्रबंधित करना सबसे अच्छा होगा। –