2008-09-24 8 views
11

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

मैं विकल्प के एक जोड़े के बारे में सोचा:

(क) की तरह स्रोत आधार के शीर्ष पर सी फ़ाइलें (विशेष रूप से, एक ज फ़ाइल और एक ग फ़ाइल) डालने के लिए एक अलग निर्देशिका बनाएँ:

/vobs/MyProduct/javasrc /vobs/MyProduct/cppsrc

क्योंकि मैं केवल दो सी फ़ाइलें है और यह बहुत ही इस तरह भाषा के स्तर पर स्रोत आधार विभाजित करने के लिए अजीब लग रहा था

मुझे यह पसंद नहीं था । अगर परियोजना के पर्याप्त भाग सी ++ और जावा में समान रूप से समान रूप से लिखे गए थे, तो यह ठीक हो सकता है।

(बी) सी फाइलों को जावा पैकेज में रख दें जो इसका उपयोग करता है।

मेरे पास जावा क्लास/vobs/myproduct/com/mycompany/myproduct/util/में कॉलिंग है और सी फाइलें भी वहां जाती हैं।

मुझे यह पसंद नहीं आया क्योंकि मुझे लगता है कि सी फाइलें सिर्फ जावा पैकेज में नहीं हैं।

क्या किसी ने इससे पहले इस तरह की समस्या हल की है? आम तौर पर, कोडबेस का आयोजन करते समय पालन करने के लिए एक अच्छी रणनीति क्या होती है जो दो या दो से अधिक भाषाओं को मिश्रित करती है?

अपडेट: मेरे पास मेरी परियोजना में किसी भी सी या सी ++ का उपयोग करने की कोई योजना नहीं है, शायद कुछ ज्योथन, लेकिन आप कभी नहीं जानते कि मेरे ग्राहकों को ऐसी सुविधा की आवश्यकता होती है जिसे केवल सी का उपयोग करके हल किया जा सकता है या सबसे अच्छा हल करके हल किया जा सकता है सी

उत्तर

6

"मुझे यह पसंद नहीं आया क्योंकि मेरे पास केवल दो हैं सी फाइलें और भाषा स्तर पर स्रोत आधार को विभाजित करना बहुत अजीब लग रहा था जैसे कि "

यह अजीब क्यों लगता है? इस परियोजना पर विचार करें:

 
    project1\src\java 
    project1\src\cpp 
    project1\src\python 

या, यदि आप मॉड्यूल में चीजों को अलग करने का फैसला:

 
    project1\module1\src\java 
    project1\module1\src\cpp 
    project1\module2\src\java 
    project1\module2\src\python 

मुझे लगता है कि यह व्यक्तिगत स्वाद की बात है, लेकिन ऊपर संरचना काफी आम है, और मुझे लगता है कि इसका उपयोग करने के बाद यह काफी अच्छा काम करता है।

+1

यह वही है कि हमारे पास यह कहां है जहां मैं हूं। यह काफी अच्छी तरह से काम करता है। मेवेन सम्मेलन को अपनाने के लिए – Herms

0

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

0

विभाजित भाषा समाधान के मामले में व्यक्तिगत रूप से, मैं उन्हें अलग-अलग परियोजनाओं या फ़ोल्डर्स में रखूंगा।

समस्या को देखने का एक तरीका सी कक्षाओं को किसी अन्य तीसरे पक्ष एपीआई की तरह व्यवहार करना है। तंग युग्मन से बचने के लिए निर्भरताएं (यानी प्रत्यक्ष कॉल से बचें) को इंटरफ़ेस करें और सी स्रोत को जावा से एक अलग परियोजना/फ़ोल्डर में रखें।

0

चलिए विभिन्न शब्दावली का उपयोग करते हैं। एक उत्पाद है जो परियोजना नहीं है। उत्पाद में जावा वर्कस्पेस और सी/सी ++ वर्कस्पेस शामिल हैं, प्रत्येक अलग-अलग आईडीई से लोड किए जा सकते हैं। आखिरकार यदि आप एक और एक ही आईडीई का उपयोग करते हैं तो केवल एक कार्यक्षेत्र होगा। प्रत्येक कार्यक्षेत्र में कई परियोजनाएं होती हैं। प्रत्येक प्रोजेक्ट की अपनी फ़ोल्डर संरचना होती है (src, bin, res, e.t.c)। तो यदि यह केवल एक कार्यक्षेत्र है, तो कम से कम एक जावा और एक सी/सी ++ परियोजना के अंदर बेहतर है, प्रत्येक अलग संकलन/रन/डीबग/आउटपुट/... सेटिंग्स के साथ।

तो, मैं का प्रयोग करेंगे:

Product/Workspace(1)/JavaProject1/src 
Product/Workspace(1)/JavaProject2/src 
Product/Workspace(1 or 2)/CPPproject1/src 
Product/Workspace(1 or 2)/CPPproject2/src ... 

इस तरह आप अंततः एक और प्रत्येक परियोजना के लिए एक ही फ़ोल्डर संरचना है, जो और अधिक सुसंगत है उपयोग कर सकते हैं। मूल रूप से यह केवल एक और स्तर का अमूर्त है - उत्पाद को विभिन्न संबंधित परियोजनाओं में विभाजित करता है।

4

वेब ऐप्स के लिए डिफ़ॉल्ट मेवेन-जेनरेटेड लेआउट src/main/java, src/test/java, src/main/resources, और src/test/resources है। मुझे लगता है कि यह src/main/cpp और src/test/cpp जोड़ने के लिए भी डिफ़ॉल्ट होगा। यह मेरे लिए एक सभ्य पर्याप्त सम्मेलन की तरह लगता है।

+0

+1 - ने प्लॉयग्लॉट परियोजनाओं में मेरे लिए अच्छा काम किया है। – mikera

1

उन्हें अलग फ़ोल्डर में रखना एक अच्छा विचार है। यह सी फाइलों के लिए जावा पैकेज खोजने से ढूंढना आसान बनाता है, और यह भविष्य में और अधिक सी कोड को जोड़ने के बिना भविष्य में अधिक सी कोड जोड़ने की संभावना भी देता है।

0

इस मामले में, प्रश्न में फाइलें सिर्फ एक अलग भाषा नहीं हैं, बल्कि एक अलग प्रोग्राम के रूप में भी चलती हैं जो परिभाषित इंटरफेस के माध्यम से बातचीत करती है। इसका मतलब है कि स्रोत फ़ाइलों को एक अलग परियोजना के रूप में माना जा सकता है, और इसलिए कहीं और रखा जाता है।

मामला .NET प्रोजेक्ट्स में अलग है जो एक कोडबेस के भीतर सी # और एएसपी.नेट (उदाहरण के लिए) मिश्रण करता है। लोग ऐसे मामलों में अपना कोड कैसे व्यवस्थित करते हैं?