संसाधन जोड़ें, ग्रेडल का उपयोग करके अपने जार में फ़ाइलों को कॉन्फ़िगर करें


91

मैं ग्रेडिंग का उपयोग करके अपने जार में कॉन्फ़िगर फ़ाइलों या किसी अन्य संसाधन को कैसे जोड़ूं?

मेरी परियोजना संरचना:

src / main / java / com / perseus / .. --- जावा संकुल (स्रोत फ़ाइलें)

src / main / java / config / *। xml --- स्प्रिंग कॉन्फिग फाइल

अपेक्षित जार संरचना:

कॉम / पर्सस / .. --- जावा पैकेज (क्लास फाइलें)

config / *। xml --- स्प्रिंग config files

जवाबों:


81

मुझे यह पता चला कि संसाधनों के लिए अतिरिक्त निर्देशिका कैसे जोड़ना है। मुझे एक समाधान मिला जो किसी के लिए उपयोगी हो सकता है। यह पाने के लिए मेरा अंतिम विन्यास है:

sourceSets {
    main {
        resources {
            srcDirs "src/main/resources", "src/main/configs"
        }
    }
}

5
स्वीकृत उत्तर की तुलना में यह बहुत सरल उपाय है
स्टीवर्ट

70

से config फ़ाइलों को स्थानांतरित src/main/javaकरने के लिए src/main/resources


1
मेरे लिए काम करता है, इसे प्राप्त करने के बारे में जाने का सबसे आसान और "सबसे सही" तरीका है।
ईएम-क्रिएशंस

यह उत्तर एक समाधान के बजाय एक काम के आसपास का सुझाव देता है, और ग्रेडल एक समाधान प्रदान करता है।
भयानक ताडपोल

@ टरटलटैडपोल यह सही समाधान है। अन्य सभी वर्कअराउंड हैं।
१२:०२ पर जॅनीस

63

धन्यवाद दोस्तों, मैं ग्रैडल के लिए एक मौजूदा परियोजना को स्थानांतरित कर रहा था और परियोजना संरचना को बदलने का विचार पसंद नहीं आया।

मैंने इसे समझ लिया है, सोचा कि यह जानकारी शुरुआती लोगों के लिए उपयोगी हो सकती है।

यहाँ मेरा 'build.gradle' से एक नमूना कार्य है:

version = '1.0.0'

jar {
   baseName = 'analytics'
   from('src/main/java') {
      include 'config/**/*.xml'
   }

   manifest {
       attributes 'Implementation-Title': 'Analytics Library', 'Implementation-Version': version
   }
}

34
स्रोत सेट को फिर से कॉन्फ़िगर करना अधिक सटीक है। कुछ इस तरह sourceSets.main.resources { srcDirs = ["src/main/java"]; exclude "**/*.java" }
पीटर निडरविज़र

1
धन्यवाद @PeterNiederwieser !! मेरे log4j.xml फ़ाइल को मेरे निष्पादन योग्य जार में शामिल करने की कोशिश कर रहा है जिसे मैं छाया का उपयोग करके बना रहा था। मैं भी एक पुरानी परियोजना के साथ काम कर रहा था और आसानी से निर्देशिका संरचना को बदल नहीं सकता था। आपका सुझाव वास्तव में मुझे क्या चाहिए था !! : डी
पिको

@PeterNiederwieser - मैं जावा प्लगइन प्रलेखन में ध्यान देता हूं कि संसाधनों को पहले से ही परिभाषित किया गया है। * जावा। "केवल संसाधन समाहित करता है, और संसाधन स्रोत निर्देशिकाओं में पाई गई किसी भी .java फ़ाइलों को शामिल नहीं करता है।"
जो बॉबीर

25

डिफ़ॉल्ट रूप से आपके द्वारा जोड़ी जाने वाली किसी भी फ़ाइल src/main/resourcesको जार में शामिल किया जाएगा।

यदि आपको किसी भी कारण से उस व्यवहार को बदलने की आवश्यकता है, तो आप कॉन्फ़िगर करके ऐसा कर सकते हैं sourceSets

प्रलेखन के इस भाग में सभी विवरण हैं


4
क्या आप जानते हैं कि सामग्री के साथ संसाधन निर्देशिका के .../resources/बजाय केवल सामग्री ही क्यों शामिल की जाती है?
सर्ग

@ सरगस आपको शायद एक नया सवाल शुरू करना चाहिए जहां आप आसानी से सभी संदर्भों को शामिल कर सकते हैं। टिप्पणी अनुभाग में अधिक जानकारी प्राप्त करना कठिन है :(
जियोकंड

18

मैं एक समस्या मे फंस गया। मेरे पास एक जावा पैकेज में PNG फ़ाइल थी और इसे सूत्रों के साथ अंतिम JAR में निर्यात नहीं किया गया था, जिसके कारण ऐप शुरू होने पर दुर्घटनाग्रस्त हो गया (फ़ाइल नहीं मिली)।

ऊपर दिए गए किसी भी उत्तर ने मेरी समस्या का समाधान नहीं किया लेकिन मुझे ग्रेडेल मंचों पर इसका समाधान मिला। मैंने अपनी build.gradleफ़ाइल में निम्न जोड़ा :

sourceSets.main.resources.srcDirs = [ "src/" ]
sourceSets.main.resources.includes = [ "**/*.png" ]

यह ग्रैडल को srcफ़ोल्डर में संसाधन देखने के लिए कहता है , और इसे केवल पीएनजी फाइलों को शामिल करने के लिए कहता है।

संपादित करें: सावधान रहें कि यदि आप ग्रहण का उपयोग कर रहे हैं, तो यह आपके रन कॉन्फ़िगरेशन को तोड़ देगा और आपको main class not foundअपना प्रोग्राम चलाने का प्रयास करते समय एक त्रुटि मिलेगी । इसे ठीक करने के लिए, एकमात्र समाधान जो मैंने पाया है वह है छवि को दूसरे निर्देशिका में स्थानांतरित करना, res/उदाहरण के लिए, और srcDirsइसके बजाय इसे सेट करना src/


2
मैंने +=अपने sourceSets.main.resources.srcDirs += [ "src/main/java" ]
डायर

3

ध्यान रखें कि src / main / resource के तहत पथ संसाधन तक पहुँचने के लिए आपकी .class फ़ाइलों के पैकेज पथ से मेल खाना चाहिए। मेरा जवाब यहां देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.