java - जावा, एक्लिप्स, और चींटी के साथ स्वचालित रूप से निर्मित फाइलें और लाइब्रेरी कॉपी करें




eclipse ant build build-automation (2)

मैं विंडोज 7 पर एक्लिप्स के साथ जावा का उपयोग कर रहा हूं, और मैं एक सर्वर प्रोग्राम बनाने की कोशिश कर रहा हूं जो कि मेरे नेटवर्क पर दूसरे (उबुंटू) मशीन पर चलने वाला है।

मैं बाहरी श्रेणी में निर्मित श्रेणी फ़ाइलों को सहेजने के लिए ग्रहण कैसे प्राप्त कर सकता हूं (मेरे पास ड्राइव मैप है, या यह एसएसएच / एसएफटीपी / जो भी हो सकता है)?

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

मुझे लगता है कि चींटी जो मुझे विश्वास है कि ग्रहण के साथ स्थापित किया गया है ऐसा कर सकते हैं, लेकिन मुझे यकीन नहीं है कि यह कैसे हो सकता है।


Answers

आपने जार फ़ाइलों का उल्लेख किया है, और वे वास्तव में निर्भरताएं हैं आप आइवी जैसे कुछ निर्भरता प्रबंधन प्रणाली पर एक नज़र रखना चाहते हैं, या मैवेन पर स्विच कर सकते हैं, अगर आप वास्तव में अपनी जार फाइलों को अपने रिपॉजिटरी में शामिल नहीं करना चाहते हैं

और वैकल्पिक रूप से, आप हमेशा एंटी के निर्माण "स्क्रिप्ट" के साथ निर्भरता की प्रतिलिपि करने में सक्षम होते हैं (हालांकि वे वास्तव में "स्क्रिप्ट" नहीं, XMLs हैं)।

मैं बाहरी श्रेणी में निर्मित श्रेणी फ़ाइलों को सहेजने के लिए ग्रहण कैसे प्राप्त कर सकता हूं (मेरे पास ड्राइव मैप है, या यह ssh / sftp / whatever पर भी हो सकता है)?

"किसी बाहरी स्थान में उन्हें कैसे बचाएं" को हल करने का एक तरीका सोचने में मुश्किल है हालांकि, आप मानक स्कीम चलाने के बाद फ़ाइलों की प्रतिलिपि बनाने के लिए, केवल <scp> कार्य (एसएसएच पर आधारित) या <ftp> कार्य का उपयोग करके एक लक्ष्य लिख सकते हैं

आदर्श रूप से मैं एक और निर्देशिका में स्वतन्त्र रूप से उपयोग किए गए निर्मित वर्गों और पुस्तकालयों की ग्रहण की प्रतिलिपि करना चाहता हूं।

एक्लिप्स ने चींटी के लिए अंतर्निहित समर्थन दिया है मैं एक्लिप्स का उपयोग नहीं करता, लेकिन मैं नेटबीन्स का उपयोग करता हूँ नेटबीन्स में, एक परियोजना वास्तव में Netbeans द्वारा उत्पन्न एंट बिल्ड फ़ाइल के साथ बनाया गया है और, आप बिल्ड फाइल को कस्टमाइज़ कर सकते हैं, अपना लक्ष्य जोड़ सकते हैं, और तब आप आईडीई के अंदर अपना खुद का लक्ष्य चला सकते हैं।

उदाहरण के लिए, आपके पास build लक्ष्य, एक deploy लक्ष्य, एक run लक्ष्य है। पहला ग्रहण से उत्पन्न होता है और आपको इसकी परवाह करने की आवश्यकता नहीं है, जबकि बाद के दो आपके द्वारा लिखे गए हैं। बस एक और लक्ष्य लिखें, all कहते all , और <antcall> का उपयोग करें एक से दूसरे के बाद तीन लक्ष्य को चलाने के लिए और फिर, एक्लिप्स में, आप सभी चीजों को चींटी से संभालने के लिए सीधे all लक्ष्य चला सकते हैं।

और जब भी मैं "रन" पर क्लिक करता हूं, तब भी कार्यक्रम को स्वचालित रूप से चलाने / मारने के लिए इसे आदर्श रूप से मारना पड़ता है, हालांकि मुझे संदेह है कि यह थोड़ा बहुत आशावादी भी हो सकता है

लक्ष्य मशीन एक लिनक्स मशीन है, इसलिए आप एसटीएच सर्वर को आसानी से इंस्टॉल कर सकते हैं। अपनी चींटी बिल्ड फाइल में दो लक्ष्य लिखें, एक run , और दूसरा को kill

run लक्ष्य के अंदर, आप अपने ऐप को चलाने के लिए <sshexec> का उपयोग कर सकते हैं। आपको केवल एक चीज की देखभाल करने की ज़रूरत है जो उस मशीन पर परिभाषित पर्यावरण बरकरार है जो कि एसएसएच सत्र में उपलब्ध नहीं हो। लेकिन यह सिर्फ एक कॉन्फ़िगरेशन समस्या है कम से कम आप /etc/environment में varibles डाल सकते /etc/environment , हालांकि यह सबसे अच्छा अभ्यास नहीं है।

kill लक्ष्य थोड़ा अधिक जटिल हो सकता है। हालांकि, मेरी राय में, यदि आप ऐप शुरू करने के लिए startup.sh लिख सकते हैं, तो आप हमेशा इसे बंद करने के लिए stop.sh लिख सकते हैं ( stop.sh की कैटालिना.श पर एक नज़र डालें)।

और भी, kill लक्ष्य को आपके ग्रहण के अंदर कहा जा सकता है।


Here is the simplest and most concise way, although I do not know how it compares in terms of CPU cycles. This works great if you only wish to know if the root is a whole number. If you really care if it is an integer, you can also figure that out. Here is a simple (and pure) function:

public static boolean isRootWhole(double number) {
    return Math.sqrt(number) % 1 == 0;
}

If you do not need micro-optimization, this answer is better in terms of simplicity and maintainability. If you will be getting negative numbers, perhaps you will want to use Math.abs() on the number argument as the Math.sqrt() argument.

On my 3.6Ghz Intel i7-4790 CPU, a run of this algorithm on 0 - 10,000,000 took an average of 35 - 37 nanoseconds per calculation. I did 10 sequential runs, printing the average time spent on each of the ten million sqrt calculations. Each total run took just a little over 600 ms to complete.

If you are performing a lesser number of calculations, the earlier calculations take a bit longer.







java eclipse ant build build-automation