पोम में परिभाषित मावेन गुण


81

मैं एक सामान्य मावेन परियोजना में और मावेन प्लगइन परियोजना में पोम में परिभाषित मावेन गुणों का उपयोग कैसे करूं?


1
आप किस प्रकार की जानकारी में रुचि रखते हैं? यदि यह सिर्फ संस्करण या इसी तरह की चीजें हैं, तो संभवतः इसे प्रकट में रखना और वहां से इसे पढ़ना एक बेहतर विचार है ।
जोकिम सॉयर

1
इसके बारे में ढेर ओवरफ्लो में बहुत अधिक पोस्ट है: stackoverflow.com/search?q=read+pom+in+java , कम से कम, पोस्ट से पहले एक नज़र डालें। SO मदद करने वालों को उन्हें दिखाना चाहिए। गूगल भी।
जीन-रेमी रेव जुले

धन्यवाद दोस्तों। मुझे अब एहसास हुआ कि यह वास्तव में बुरा अभ्यास है। अन्य दृष्टिकोण की कोशिश करो।
स्प्रेडवेअर जूल

जवाबों:


76

संकलन समय पर किसी फ़ाइल में विशिष्ट पोम लिखने के लिए गुण-मावेन-प्लगइन का उपयोग करें properties, और फिर उस फ़ाइल को रन समय पर पढ़ें।

अपने pom.xml में :

<properties>
     <name>${project.name}</name>
     <version>${project.version}</version>
     <foo>bar</foo>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0.0</version>
            <executions>
                <execution>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>write-project-properties</goal>
                    </goals>
                    <configuration>
                        <outputFile>${project.build.outputDirectory}/my.properties</outputFile>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

और फिर .java में :

java.io.InputStream is = this.getClass().getResourceAsStream("my.properties");
java.util.Properties p = new Properties();
p.load(is);
String name = p.getProperty("name");
String version = p.getProperty("version");
String foo = p.getProperty("foo");

यह काम किया है, लेकिन ग्रहण को अनंत निर्माण / तैनाती-से- टॉमकैट लूप (निर्माण -> my.properties -> संसाधन बदल -> निर्माण) में गिर गया , इसलिए मुझे चरण को बदलना पड़ा compile। सुनिश्चित नहीं है कि यह उचित समाधान है।
निकिता बोसिक

@atoregozh ने गुण फ़ाइल लोड करने के लिए अमरूद संसाधन का उपयोग करने का सुझाव दिया। ठीक। लेकिन मानक एपीआई के साथ इस उदाहरण को कम से कम रखने के लिए बदला गया परिवर्तन।
लीफ ग्रुएनवोल्ड्ट

2
एक स्थिर 1.0.0 संस्करण अब उपलब्ध है
Pieter De Bie

25

मावेन से एक सिस्टम वैरिएबल सेट करें और जावा में निम्नलिखित कॉल का उपयोग करें

System.getProperty("Key");

7
यह केवल तभी काम करेगा जब आप मावेन से परिणामी निर्माण को चला रहे हों, शायद मावेन-एक्ज़िक-प्लगइन का उपयोग कर रहे हों। यदि आप कोड को संकलित करने के लिए सिर्फ मैवेन का उपयोग कर रहे हैं, तो यह काम नहीं करेगा।
डेविड पस्ले

@DavidPashley, यह सच है। केवल संकलन के मामले में, मुझे लगता है कि कंपाइलर प्लगइन से चर को सेट करने की आवश्यकता है।
संतोष

7

यह गुणों maven-resource-pluginपर सक्षम फ़िल्टरिंग के साथ संयोजन में मानक जावा गुणों के साथ किया जा सकता है ।

अधिक जानकारी के लिए http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html देखें

यह प्लगइन परियोजनाओं के लिए मानक मावेन परियोजना के लिए काम करेगा


6

मावेन के पास पहले से ही एक उपाय है कि आप क्या चाहते हैं:

सिर्फ POM.xml - पोम पार्सर से MavenProject प्राप्त करें?

btw: पहली बार गूगल खोज पर मारा;)

Model model = null;
FileReader reader = null;
MavenXpp3Reader mavenreader = new MavenXpp3Reader();

try {
     reader = new FileReader(pomfile); // <-- pomfile is your pom.xml
     model = mavenreader.read(reader);
     model.setPomFile(pomfile);
}catch(Exception ex){
     // do something better here
     ex.printStackTrace()
}

MavenProject project = new MavenProject(model);
project.getProperties() // <-- thats what you need

1
एकल-लिंक उत्तर यहां हतोत्साहित किए जाते हैं (ज्यादातर क्योंकि लिंक-इन रिसोर्स के चले जाने पर वे बेकार हो सकते हैं)। आपको कम से कम यहाँ पोस्ट से जुड़ी जानकारी को संक्षेप में प्रस्तुत करना चाहिए।
जोकिम सॉयर

2
यह वास्तव में एक बहुत बुरा अभ्यास है, बस मावेन संसाधन प्लगइन का उपयोग करें!
मार्क बकर जूल

1
यह बुरा अभ्यास क्यों होना चाहिए अगर वह जावा कोड से गुणों को एक्सेस करना चाहता है?
SWoeste

1
लेकिन केवल तभी यदि आप यह मान लें कि वह अपना pom / s बदल सकता है। मैं आपको इस बात से सहमत हूं कि बाहरी फ़ाइल के बजाय सीधे pom फ़ाइल में गुण होना बुरा हो सकता है। उस फ़ाइल को जावा गुण वर्ग - निश्चित के साथ पढ़ा जा सकता है। लेकिन दूसरे मामले में क्या? तब मावेन-मॉडल चाल करने के लिए सबसे अच्छा समाधान है ... लेकिन इससे पहले कि डेविड दाई न बताएं कि वह वास्तव में क्या करना चाहता है हम सभी केवल अनुमान लगा रहे हैं।
स्वेस्टे

1
यह मेरी समझ भी थी कि हमारे पास एक mvan pom फ़ाइल (गुण युक्त) और एक java एप्लिकेशन है (जहाँ से हम उस pom फ़ाइल का विवरण पढ़ना चाहते हैं)। वास्तव में मावेन चलाने के बिना।
एंड्रियास डॉक

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