मुझे इस परिदृश्य का भी सामना करना पड़ा। असल में, आप कुछ उपयोगकर्ताConfig.properties फ़ाइल का उपयोग करके आसानी से सुलभ हो सकते हैं, जैसे कि /src/main/resources
के अंदर, ग्रहण से स्थानीय रूप से अपना कोड चलाने में सक्षम होना चाहते हैं। इसके अतिरिक्त, आप एक बाहरी उपयोगकर्ता कॉन्फ़िगर.प्रोपर्टीज के साथ एक संकलित निष्पादन योग्य JAR प्रदान करना चाहते हैं जो उपयोगकर्ता को JAR को क्रैक किए बिना एप्लिकेशन को कॉन्फ़िगर करने की अनुमति देता है।
मेरे कार्यान्वयन इस प्रकार है: चल mvn clean install
देगा:
- निर्दिष्ट
mainClass
- के साथ निष्पादन योग्य जार बनाने के एक
lib
फ़ोल्डर में
- प्रति परियोजना निर्भरता सभी
.properties
जार से src/main/resources
में स्थित फ़ाइलों को बाहर आपकी परियोजना रूट में
src/main/resources
मेंमें स्थित सभी .properties
फ़ाइलों की प्रतिलिपि बनाएँ आपकी परियोजना रूट मेंफ़ोल्डर। ध्यान दें कि यह चरण JAR के आपके उपयोगकर्ताओं के लिए एक वैकल्पिक सुविधा है। आपको conf
निर्देशिका में स्पष्ट रूप से इस फ़ाइल को बनाने की आवश्यकता हो सकती है। यह conf
निर्देशिका मैनिफेस्ट के माध्यम से आपके रनटाइम क्लासपाथ में प्रभावी रूप से जोड़ा जाता है।
- प्रकट करने के लिए इस
conf
फ़ोल्डर जोड़ने के लिए, अपने निष्पादन योग्य JAR
से उस तक पहुँच उपलब्ध कराने के अपने पोम विन्यास में एक दूसरे के साथ संयोजन के रूप में इन Maven प्लगइन्स का उपयोग करके आप दे देंगे कि तुम क्या जरूरत है। इस समाधान के "सर्वोत्तम प्रथाओं" के रूप में; मुझे यकीन नहीं है।
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
इस प्रकार Maven-जार-प्लगइन का उपयोग करना::
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3</version>
<configuration>
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>package.path.to.your.main.class.MainClass</mainClass>
</manifest>
<manifestEntries>
<Class-Path>conf/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
Maven-संसाधन-प्लगइन का उपयोग
इस प्रकार Maven-निर्भरता-प्लगइन का उपयोग करना के रूप में इस प्रकार है:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/conf</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
इस परियोजना सेटअप का उपयोग करना, मैं एक config का उपयोग कर ग्रहण में चलाने के लिए, और एक दूसरे पर कदम रख गुण के बिना एक प्रॉपर्टी कॉन्फ़िगर करने के लिए फ़ाइल मेरे उपयोगकर्ताओं, प्रदान कर सकते हैं।
आपका प्रश्न कोई मतलब नहीं बना है। आप कहते हैं कि आप एक फ़ाइल को बाहर निकालना चाहते हैं, लेकिन फिर आप का कहना है कि अपने app क्योंकि फ़ाइल बाहर रखा गया है काम नहीं करता। तो आप इसे पहली जगह क्यों बाहर करना चाहते थे? –
आप स्प्रिंग ढांचे का उपयोग कर रहे हैं? –
हाँ, क्रिस मैं स्प्रिंग फ्रेमवर्क का उपयोग कर रहा। –