खोज…


परिचय

कोड में मावेन गुण, जैसे वर्तमान संस्करण, को प्राप्त करना कभी-कभी उपयोगी होता है। इसके कुछ तरीके यहां दिए गए हैं।

एक जार के भीतर से संस्करण संख्या प्राप्त करना

यदि आप 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 पोम संस्करण और निर्माण समय से युक्त।

  1. निम्नलिखित सामग्री के साथ एक src/main/resources/info.txt बनाएं:

    संस्करण = $ {pom.version} build.date = $ {टाइमस्टैम्प}

  2. मावेन को filtering सेट करके गुणों का विस्तार करने के लिए कहें:

     <build>
         <resources>
             <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
             </resource>
         </resources>
     </build>
    
  3. उसके साथ, संस्करण को अपडेट किया जाएगा, लेकिन दुर्भाग्य से मावेन के भीतर एक बग ${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>
    
  4. 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


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow