हमें उस स्थान पर एक समस्या है जिसे मैं अपने कोड में एकाधिक परियोजनाओं के संदर्भ में काम करता हूं। असल में, हमारे पास एक उत्पाद है, जिसे मैं लेविथन कहूंगा। इस परियोजना में कई अन्य संस्करण हैं, जिनमें से प्रत्येक हम ग्रहण में अलग परियोजनाओं के रूप में बनाए रखते हैं। डेवलपर्स के रूप में, हमारे पास आमतौर पर ग्रहण में कई परियोजनाएं (एकाधिक संस्करण) खुली होती हैं, क्योंकि हमें पुराने संस्करणों के साथ हेल्पलाइन कॉल मिलती है (साथ ही साथ कई संस्करणों को विकसित करना)।ग्रहण हेलीओस के भीतर किसी अन्य प्रोजेक्ट में पुस्तकालयों का संदर्भ कैसे दे सकता हूं?
हमारे पास टेस्ट कोड भी है, जो लेविथन के प्रत्येक वितरण के लिए एक अलग परियोजना में है। मैं अपनी परियोजनाओं का नाम Leviathan_<branch name>
नाम देता हूं। तो, उदाहरण के लिए, मेरी ग्रहण कार्यक्षेत्र में, मैं जैसी परियोजनाओं हो सकता है:
Leviathan_scott\ (my branch) Leviathan_9.2\ Leviathan_9.3\ Leviathan_10.0\ Leviathan_10.1\ Test_scott\ Test_10.0
मेरे शाखा हमारे ट्रंक की एक प्रति है, इसलिए हम चाहते हैं कि सबसे अधिक सक्रिय विकास लाइन पर विचार कर सकते हैं।
समस्या यह है कि हम अपने परीक्षण कोड में Leviathan \ lib में कुछ पुस्तकालयों का संदर्भ देते हैं। प्रत्येक डेवलपर अपनी परियोजनाओं को थोड़ा अलग तरीके से नाम दे सकता है। तो, परीक्षण परियोजना के विकास में। क्लासपाथ, हम प्रोजेक्ट लेविथन \ (कोई जोड़ नहीं) का संदर्भ देते हैं। की तरह इस परियोजना के लिए classpath (जो हमारे स्रोत नियंत्रण प्रणाली में चेक किया गया है) दिख सकता है:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry excluding="**/*.MySCMServerInfo" kind="src" path="src"/>
<classpathentry kind="lib" path="lib/abbot-1.0.2/abbot.jar"/>
<classpathentry kind="lib" path="lib/abbot-1.0.2/costello.jar"/>
<classpathentry kind="lib" path="lib/dbunit-2.4.8/dbunit-2.4.8.jar"/>
<classpathentry kind="lib" path="lib/easymock-3.0/easymock-3.0.jar" sourcepath="lib/easymock-3.0/easymock-3.0-sources.jar">
<attributes>
<attribute name="javadoc_location" value="jar:platform:/resource/Test/lib/easymock-3.0/easymock-3.0-javadoc.jar!/"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="lib/objenesis-1.2/objenesis-1.2.jar"/>
<classpathentry kind="lib" path="lib/privilegedAccessor-1.0.2/privilegedAccessor_1.0.2.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-core/unitils-core-3.1.jar" sourcepath="lib/unitils-3.1/unitils-core/src"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-database/unitils-database-3.1.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-dbmaintainer/unitils-dbmaintainer-3.1.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-dbunit/unitils-dbunit-3.1.jar" sourcepath="lib/unitils-3.1/unitils-dbunit/src"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-inject/unitils-inject-3.1.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-mock/unitils-mock-3.1.jar" sourcepath="lib/unitils-3.1/unitils-mock/src"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-orm/unitils-orm-3.1.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-spring/unitils-spring-3.1.jar" sourcepath="lib/unitils-3.1/unitils-spring/src"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-testng/unitils-testng-3.1.jar" sourcepath="lib/unitils-3.1/unitils-testng/src"/>
<classpathentry kind="lib" path="data"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-core/lib/ognl-2.6.9.jar"/>
<classpathentry kind="lib" path="lib/testng-5.14.1/testng-5.14.1.jar" sourcepath="lib/testng-5.14.1/testng-5.14.1-src.zip"/>
<classpathentry combineaccessrules="false" kind="src" path="/Leviathan"/>
<classpathentry kind="lib" path="/Leviathan/lib/slf4j-api-1.6.1.jar"/>
<classpathentry kind="lib" path="/Leviathan/lib/hibernate3.jar" sourcepath="/Leviathan/lib/src/hibernate-3.6.0-src.zip"/>
<classpathentry kind="output" path="classes"/>
</classpath>
एक डेवलपर उसकी/उसके व्यक्तिगत ग्रहण कार्यक्षेत्र में टेस्ट परियोजना लोड करता है, वह/वह परियोजना से जोड़ने के लिए की आवश्यकता होगी वरीयता प्राप्त करने के लिए मूल लेविथन परियोजना के लिए-> जावा बिल्ड पथ-> प्रोजेक्ट्स और लेविथन_स्कॉट परियोजना जोड़ें।
बात यह है कि, यह निश्चित रूप से <classpathentry ... >
प्रविष्टियों में से कोई भी नहीं बदलता है जो "लेविथन \ lib" का संदर्भ देता है।/बदलें
- बदलें एक पाठ संपादक को खोजने का उपयोग कर मेरी .classpath में
Leviathan_<branch name>
कोLeviathan
से संदर्भ के सभी: तो, हम दो चीजों में से एक क्या करना है। - जावा बिल्डिंग पथ में लेविथन * .jar के सभी संदर्भों को हटाएं और लेविथन_स्कॉट * .jar में जार फिर से जोड़ें।
इन के साथ समस्या यह है कि यह हर बार .classpath बदल गया है, बनाता है जो इन दोनों के आदर्श से कम लग रहे हैं किया जाना चाहिए है। हमारा क्लासपाथ सुपर-नियमित रूप से नहीं बदला जाता है, लेकिन मैं कहूंगा कि यह हर दो सप्ताह में एक या दो बार बदल जाता है। मैं अपनी परियोजना को जोड़ने में सक्षम होना चाहता हूं और इन परियोजनाओं को जोड़ने के लिए केवल एक ही कदम करना है।
ऐसा लगता है कि हम एक्लिप्स के भीतर एक पर्यावरण परिवर्तक स्थापित कर सकते हैं और इसे .classpath प्रविष्टियों में जोड़ सकते हैं। लेकिन, अब हमें एक समस्या है क्योंकि अगर हमारे पास हमारे कार्यक्षेत्र में कई टेस्ट प्रोजेक्ट हैं जो हम संकलित करना चाहते हैं, तो यह काम नहीं करेगा। दोनों परीक्षण परियोजनाओं '.classpath प्रविष्टियों में एक ही पर्यावरण चर का उल्लेख किया जाएगा, जो निश्चित रूप से केवल एक सुपर परियोजना स्थान को इंगित कर सकता है।
ऐसा लगता है कि मुझे ऐसा करने में सक्षम होना चाहिए, लेकिन मुझे नहीं पता कि ग्रहण में इसे कैसे पूरा किया जाए। किसी भी विचार की बहुत सराहना की जाएगी।
~ स्कॉट
अपाचे मैवेन इस तरह की समस्याओं को एक आकर्षण की तरह बताता है। –
सहमत हुए, लेकिन 20 डेवलपर्स को एक नई बिल्ड सिस्टम पर स्विच करना मुश्किल है ... अगर हमें * बिल्कुल * करना है, तो मैं इसके लिए मामला बनाने में सक्षम हो सकता हूं, लेकिन यदि इसके बिना ऐसा करना संभव है, तो मैं इसे इस तरह से पूरा करना पसंद है। – jwir3