क्या मैं जावा में निर्देशिका के लिए "बेस पैकेज पथ" निर्दिष्ट कर सकता हूं?

अगर मेरे पास जावा पैकेज है, उदाहरण के लिए:

package org.foo.bar.stuff;

मैं स्रोत .java फ़ाइलों को किसी निर्देशिका में src/org/foo/bar/stuff में संग्रहीत कर सकता हूं, यह देखते हुए कि मैं src/ को जोड़ता हूं classpath। इस उदाहरण में निर्देशिका सामग्री पेड़ इस तरह है:

`-- src
    `-- org
        `-- foo
            `-- bar
                `-- stuff
                    |-- ICat.java
                    `-- IMouse.java

अगर मैं एक "बेस" पैकेज नाम परिभाषित कर सकता हूं, उदाहरण के लिए। एक निर्देशिका जैसे /stuff के लिए org.foo.bar , पेड़ इस तरह बन सकता है:

`-- src
    `-- stuff  # has defined base "org.foo.bar"
        |-- ICat.java
        `-- IMouse.java

तकनीकी रूप से "आधार" पैकेज नाम को परिभाषित करने का एक तरीका है, यानी। घोंसला वाली निर्देशिकाओं से बचने के लिए org.foo.bar , निर्देशिका जैसे /stuff के लिए?

1
@ElliottFrisch उस एक्सेस संशोधक या जानकारी छिपाने में परिवर्तन नहीं करेगा? क्या आप एक उदाहरण दे सकते हैं?
जोड़ा लेखक n611x007, स्रोत
@Chris मेरे लिए "मेरा रास्ता" काम करना और पेड़ को मानक संरचना में बदलने के लिए सुविधाजनक होगा। हालांकि, नेस्टेड निर्देशिकाएं अंत में असंबद्धता के लिए उपयोगी होती हैं, वे काम करने के लिए परेशान हैं (यहां तक ​​कि ग्रहण समूह जैसे आईडीई)।
जोड़ा लेखक n611x007, स्रोत
@Chris हाँ मेरा मतलब है "समूह" से, मुझे लगता है। असली समस्या यह है कि अगर मुझे आईडीई के अलावा स्रोत पेड़ ब्राउज़ करने के अन्य सुविधाजनक तरीके हैं, तो मुझे दिलचस्पी है। खोल/कमांड लाइन, mc , मानक utils, जो भी हो। मेरा मतलब है कि अगर कोई विकल्प नहीं है तो मैं सिर्फ आईडीई का उपयोग कर सकता हूं लेकिन पूछना उचित है।
जोड़ा लेखक n611x007, स्रोत
नहीं, लेकिन आप कुछ समान प्राप्त करने के लिए आंतरिक कक्षाओं का उपयोग कर सकते हैं।
जोड़ा लेखक Elliott Frisch, स्रोत
@naxa संपूर्ण जावा पारिस्थितिकी तंत्र मानक फ़ाइल/पैकेज संरचना के आसपास बनाया गया है। यदि आप अपना "अपना रास्ता" रखना चाहते हैं, तो आप अपने द्वारा उपयोग किए जाने वाले हर टूल से लड़ने जा रहे हैं, और मानकों को नेविगेट करने के लिए (काफी आसान) टूल सीखना बेहतर होता है: वे किसी कारण से विकसित किए गए थे।
जोड़ा लेखक chrylis, स्रोत
यह अभी भी लगता है जैसे आप असली समस्या के आसपास काम कर रहे हैं। ग्रहण में खाली निर्देशिका को एक पंक्ति में सम्मिलित करने का विकल्प होता है।
जोड़ा लेखक Christian Strempfer, स्रोत

2 उत्तर

जबकि जावा विनिर्देश इसे लागू नहीं करता है, सभी प्रसिद्ध संकलक निर्देशिका संरचनाओं का उपयोग करते हैं। विनिर्देश स्पष्ट रूप से कक्षाओं के भंडारण के लिए डेटाबेस बताता है, जो किसी भी निर्देशिका का उपयोग नहीं करेगा।

संक्षिप्त उत्तर: यदि आप मानक जावा टूल्स का उपयोग कर रहे हैं, तो आप नेस्टेड निर्देशिका से बच नहीं सकते हैं।

7.2। पैकेज के लिए होस्ट समर्थन

     

प्रत्येक होस्ट सिस्टम निर्धारित करता है कि संकुल और संकलन इकाइयां कैसे हैं   बनाया और संग्रहीत।

     

...

     

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

     

यदि कोई होस्ट सिस्टम किसी डेटाबेस में संकुल और संकलन इकाइयों को संग्रहीत करता है,   तो डेटाबेस को वैकल्पिक प्रतिबंध (§7.6) लागू नहीं करना चाहिए   संकलन इकाइयां फ़ाइल-आधारित कार्यान्वयन में अनुमत हैं।

     

...

     

सिस्टम जो डेटाबेस का उपयोग करते हैं, उन्हें एक विकल्प प्रदान करना चाहिए   एक कार्यक्रम को ऐसे रूप में परिवर्तित करें जो प्रयोजनों के लिए प्रतिबंधों का पालन करता हो   फ़ाइल-आधारित कार्यान्वयन में निर्यात का।

(ऐसा लगता है कि आप असली समस्या के आसपास काम कर रहे हैं।)

2
जोड़ा
समझा। मैं अनुकूलित करने की कोशिश नहीं कर रहा हूं, यह सिर्फ एक अस्थायी परिवर्तन होगा। मेरी टिप्पणी देखें। मुझे लगता है कि मैं बस पूरे पैकेज का अस्थायी रूप से नाम बदल सकता हूं। :)
जोड़ा लेखक n611x007, स्रोत
उत्तर को बढ़ाने के लिए, क्या आप जेएलएस के हिस्से से परिचित मौके से हैं जो इसे परिभाषित करता है?
जोड़ा लेखक n611x007, स्रोत
@naxa: महान सवाल। जैसा कि मैंने सोचा था, विनिर्देश भंडारण पर उतना सख्त नहीं है जितना मैंने सोचा था।
जोड़ा लेखक Christian Strempfer, स्रोत

हालांकि ऐसा करना संभव है, मैं जरूरी नहीं कि इसका समर्थन करता हूं। अगर (किसी कारण से) आप अपने वर्गों को पैकेज में घोंसला नहीं करना चाहते हैं, तो आप अपनी कक्षाओं में अपनी कक्षाएं घोंसला कर सकते हैं (यदि आप वास्तव में चाहते हैं) ...

package it.is.a;

public class Demo {
  public static class A {}
  public static class B {}
}

फिर it.is.a.Demo.A और it.is.a.Demo.B को डेमो के साथ समूहीकृत किया गया है।

0
जोड़ा
क्या यह आयात के साथ अच्छा खेलता है?
जोड़ा लेखक n611x007, स्रोत
@ क्रिस अच्छा बिंदु। अस्वीकरण जोड़ने के लिए संपादित किया गया।
जोड़ा लेखक Elliott Frisch, स्रोत
हालांकि यह बताई गई समस्या को हल करेगा, आपको सच में नहीं लगता कि यह एक अच्छा विचार है, है ना? ;)
जोड़ा लेखक Christian Strempfer, स्रोत