Apache Maven
कोड में पहुंच मावेन informations
खोज…
परिचय
कोड में मावेन गुण, जैसे वर्तमान संस्करण, को प्राप्त करना कभी-कभी उपयोगी होता है। इसके कुछ तरीके यहां दिए गए हैं।
एक जार के भीतर से संस्करण संख्या प्राप्त करना
यदि आप maven-jar-plugin
या maven-assembly-plugin
का उपयोग करके एक jar
में अपने आवेदन को पैकेज करते हैं, तो वर्तमान पोम संस्करण को प्राप्त करने का एक आसान तरीका है कि मैनिफ़ेस्ट में एक प्रविष्टि जोड़ना है, जो तब जावा से उपलब्ध है।
रहस्य addDefaultImplementationEntries
ध्वज को सही पर सेट करने के लिए है (और addDefaultSpecificationEntries
आप भी विरूपण साक्ष्य आईडी की जरूरत है)।
जार प्लगइन कॉन्फ़िगरेशन :
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>...</mainClass>
<addDefaultImplementationEntries>
true
</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
असेंबली प्लगइन कॉन्फ़िगरेशन :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
<executions>
<execution .../>
</executions>
</plugin>
addDefaultImplementationEntries
अपने जार के MANIFEST.MF
को निम्नलिखित हेडर जोड़ने के लिए मावेन को निर्देश देता है:
Implementation-Title: display-version
Implementation-Version: 1.0-SNAPSHOT
Implementation-Vendor-Id: test
अब आप वर्जन नंबर को एक्सेस करने के लिए अपने जार में कहीं भी कोड की इस लाइन का उपयोग कर सकते हैं:
getClass().getPackage().getImplementationVersion()
मावेन की संपत्ति फ़िल्टरिंग मेकेनिज्म का उपयोग करके एक संपत्तियों की फाइल को सिंक में रखना
जैसा कि इस दस्तावेज में बताया गया है,
कभी-कभी एक संसाधन फ़ाइल में एक मान शामिल करना होगा जो केवल बिल्ड समय पर आपूर्ति की जा सकती है। मावेन में इसे पूरा करने के लिए, सिंटैक्स
${<property name>}
का उपयोग करके आपके संसाधन फ़ाइल में मूल्य रखने वाली संपत्ति का संदर्भ${<property name>}
। संपत्ति आपकेpom.xml
में परिभाषित मूल्यों में से एक हो सकती है, उपयोगकर्ता कीsettings.xml
में परिभाषित मूल्य।pom.xml
, एक बाहरी गुण फ़ाइल में परिभाषित संपत्ति या एक सिस्टम गुण है।
उदाहरण के लिए, के एक सरल बना सकते हैं info.txt
में src/main/resources
पोम संस्करण और निर्माण समय से युक्त।
निम्नलिखित सामग्री के साथ एक
src/main/resources/info.txt
बनाएं:संस्करण = $ {pom.version} build.date = $ {टाइमस्टैम्प}
मावेन को
filtering
सेट करके गुणों का विस्तार करने के लिए कहें:<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
उसके साथ, संस्करण को अपडेट किया जाएगा, लेकिन दुर्भाग्य से मावेन के भीतर एक बग
${maven.build.timestamp}
संपत्ति को संसाधन फ़िल्टरिंग तंत्र (अधिक जानकारी यहां ) से पारित होने से रोकता है। तो, चलो एकtimestamp
संपत्ति को वर्कअराउंड के रूप में बनाते हैं! पोम के गुणों में निम्नलिखित जोड़ें:<properties> <timestamp>${maven.build.timestamp}</timestamp> <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm</maven.build.timestamp.format> </properties>
maven चलाते हैं, तो आप एक खोजना चाहिए
info.txt
मेंtarget/classes
की तरह एक सामग्री के साथ:version=0.3.2 build.date=2017-04-20T13:56
मावेन-मॉडल प्लगइन का उपयोग करके रनटाइम पर एक pom.xml पढ़ना
किसी एप्लिकेशन में संस्करण संख्या को सांख्यिकीय रूप से प्राप्त करने के लिए अन्य उदाहरण सबसे अच्छा और सबसे स्थिर तरीका हो सकते हैं। यह उत्तर मावेन मावेन-मॉडल लाइब्रेरी का उपयोग करते हुए, रनटाइम के दौरान गतिशील रूप से यह करने के लिए एक विकल्प दिखाता है।
निर्भरता जोड़ें:
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>3.3.9</version>
</dependency>
जावा में, अपने पोम को पढ़ने के लिए एक MavenXpp3Reader
बनाएं। उदाहरण के लिए:
package de.scrum_master.app;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.FileReader;
import java.io.IOException;
public class MavenModelExample {
public static void main(String[] args) throws IOException, XmlPullParserException {
MavenXpp3Reader reader = new MavenXpp3Reader();
Model model = reader.read(new FileReader("pom.xml"));
System.out.println(model.getId());
System.out.println(model.getGroupId());
System.out.println(model.getArtifactId());
System.out.println(model.getVersion());
}
}
कंसोल लॉग निम्नानुसार है:
de.scrum-master.stackoverflow:my-artifact:jar:1.0-SNAPSHOT
de.scrum-master.stackoverflow
my-artifact
1.0-SNAPSHOT