2010-10-21 18 views
9

के माध्यम से यूयूआईडी उत्पन्न करना मुझे maven pom.xml फ़ाइल में एक संपत्ति सेट करने की आवश्यकता है जो एक यूयूआईडी होना चाहिए। क्या कोई मुझे बता सकता हैमेवेन

यूयूआईडी को संपत्ति सेट करने का सबसे अच्छा तरीका क्या है?

मैं किसी प्रोफ़ाइल जो gigaspaces और gigaspaces लांच का उपयोग कर रहा समूह नाम जो मैं

अद्वितीय (UUID) होना चाहता हूँ की आवश्यकता है। तो, मेरी प्रोफ़ाइल में मैं एक समूह नाम संपत्ति मान सेट करना चाहता हूं जो

प्रत्येक निर्माण के लिए बदलना चाहिए। मैंने एक UUIDGenerator प्लगइन खुद लिखा क्योंकि मुझे कोई नहीं मिला।

तो, मैं देख रहा हूं कि यह कैसे प्राप्त किया जा सकता है? एक प्लगइन बेहतर विकल्प लिख रहा है या

आसान विकल्प है।

धन्यवाद,

शेखर

+0

गूगल के 3 सेकंड की तरह मुझे ले गया और मुझे गंदा लग रहा था अगर यह एक जवाब के रूप upvoted कर ली, लेकिन यहाँ एक है ऐसा करने का शानदार तरीका: http://johannburkard.de/software/uuid/ –

+1

@ डेविड लिंक दिखाता है कि यूयूआईडी उत्पन्न करने वाले lib को कैसे जोड़ना है, लेकिन मुझे लगता है कि ओपी को यूआईआईडी को पोम में सेट करने की आवश्यकता है। @ शेखर मुझे सही करें अगर मैं गलत हूं –

+0

आप क्या हासिल करने की कोशिश कर रहे हैं? सिमल्स वे इसे कमांड लाइन के माध्यम से लोड करना है: 'mvn build "-Dcommand.line.prop = हैलो फिर से"' और आप इसे 'line.prop = $ {command.line.prop} ' – amra

उत्तर

7

सबसे पहले, अपने सेट अप कुछ "समूह का नाम" कहा जाता है की आवश्यकता है, तो आप शायद एक सार्थक मूल्य प्रदान करना चाहिए। यदि यह अद्वितीय होना है, तो आप कुछ जेनरेट किए गए पात्रों को जोड़ सकते हैं, जैसे "माईप्प्लिकेशन -10 9 37410"। इसके अलावा, एक यूयूआईडी का उपयोग करना मुझे एक अखरोट को तोड़ने के लिए एक स्लेज-हथौड़ा का उपयोग करने जैसा लगता है। लेकिन यह आपकी वास्तविक समस्या से स्वतंत्र है, इसलिए यहां समाधान का प्रस्ताव है:

यदि आपने पहले से ऐसा नहीं किया है, तो एक मेवेन प्लगइन बनाएं (इसके लिए एक आर्केटाइप है)।

<dependency> 
     <groupId>org.apache.maven</groupId> 
     <artifactId>maven-project</artifactId> 
     <version>2.2.1</version> 
    </dependency> 

इस तरह अपने मोजो देखना चाहिए कि कैसे है:

/** 
* Goal which generates a group name. 
* 
* @goal generate 
* @phase initialize 
*/ 
public class GroupNameGeneratorMojo extends AbstractMojo { 

    /** 
    * @parameter expression="${project}" 
    * @required 
    * @readonly 
    */ 
    private MavenProject project; 

    @Override 
    public void execute() throws MojoExecutionException { 
     String groupName = ... ; 
     project.getProperties().setProperty("uniqueGroupName", groupName); 
    } 

} 

अपने वास्तविक परियोजनाओं में पोम, ${uniqueGroupName} का उपयोग जहाँ आप इसकी आवश्यकता है और इस

<build> 
    <plugins> 
     <plugin> 
      <groupId>the.plugin.groupid</groupId> 
      <artifactId>groupNameGenerator</artifactId> 
      <executions> 
       <execution> 
        <goals><goal>generate</goal></goals> 
       </execution> 
      </executions> 
     <plugin> 
की तरह अपने प्लगइन कॉन्फ़िगर इस निर्भरता जोड़ें
8

एरियन का solution (एक मेवेन प्लगइन लागू करना) आईएमओ आपकी आवश्यकता को लागू करने का एक साफ तरीका है (और उसके उत्तर के लिए +1)।

लेकिन यदि आप कहीं और अपनी प्लगइन का पुन: उपयोग करने की योजना नहीं बनाते हैं, तो GMavenPlus plugin का उपयोग करके पोम को हैक करने का एक त्वरित विकल्प होगा। यहाँ एक पुस्तकालय से एक जावा वर्ग का उपयोग कर कुछ UUID पैदा करते हैं और एक संपत्ति के रूप में सेट करने के लिए ऐसा करने के लिए कैसे दिखा एक उदाहरण है:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.stackoverflow</groupId> 
    <artifactId>Q3984794</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>org.safehaus.jug</groupId> 
     <artifactId>jug</artifactId> 
     <version>2.0.0</version> 
     <!-- the classifer is important!! --> 
     <classifier>lgpl</classifier> 
     </dependency> 
    </dependencies> 
    </dependencyManagement> 
    <dependencies> 
    ... 
    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.gmaven</groupId> 
     <artifactId>gmaven-plugin</artifactId> 
     <version>1.3</version> 
     <executions> 
      <execution> 
      <id>set-custom-property</id> 
      <phase>initialize</phase> 
      <goals> 
       <goal>execute</goal> 
      </goals> 
      <configuration> 
       <classpath> 
       <element> 
        <groupId>org.safehaus.jug</groupId> 
        <artifactId>jug</artifactId> 
        <classifier>lgpl</classifier> 
       </element> 
       </classpath> 
       <source> 
       import org.safehaus.uuid.UUIDGenerator 
       def uuid = UUIDGenerator.getInstance().generateRandomBasedUUID() 
       project.properties.setProperty('groupName', uuid.toString()) 
       </source> 
      </configuration> 
      </execution> 
      <execution> 
      <id>show-custom-property</id> 
      <phase>generate-resources</phase> 
      <goals> 
       <goal>execute</goal> 
      </goals> 
      <configuration> 
       <source> 
       def props = project.properties 
       props.each {key, value -&gt; println key + "=" + value} 
       </source> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

बस एक चरण gigaspaces सामान लेने से पहले तक प्लगइन बाँध।

दूसरा निष्पादन (गुण दिखाने के लिए) प्रदर्शन प्रयोजन के लिए बस नहीं है:

 
$ mvn generate-resources 
[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Q3984794 1.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- gmaven-plugin:1.3:execute (set-custom-property) @ Q3984794 --- 
[INFO] 
[INFO] --- gmaven-plugin:1.3:execute (show-custom-property) @ Q3984794 --- 
downloadSources=true 
downloadJavadocs=true 
project.reporting.outputEncoding=UTF-8 
project.build.sourceEncoding=UTF-8 
groupName=814ff1a5-a102-426e-875c-3c40bd85b737 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
...