आप मावेन -3 टाइमस्टैम्पड स्नैपशॉट से कुशलतापूर्वक कैसे निपटते हैं?


86

अब उस मावेन -3 ने स्नैपशॉट आर्टिफैक्ट्स के लिए <uniqueVersion> false </ uniqueVersion> के लिए समर्थन छोड़ दिया, ऐसा लगता है कि आपको वास्तव में टाइमस्टैम्प्ड स्नैपशॉट का उपयोग करने की आवश्यकता है। विशेष रूप से m2eclipse, जो maven 3 का उपयोग करता है आंतरिक रूप से इससे प्रभावित होने लगता है, अपडेट-स्नैपशॉट काम नहीं करता है जब SNAPSHOTS अद्वितीय नहीं होते हैं।

यह सबसे अच्छा लग रहा था इससे पहले कि सभी स्नैपशॉट्स को UniqueVersion = false पर सेट किया जाए

अब, टाइमस्टैम्पड संस्करण पर स्विच करना कोई बड़ी समस्या नहीं लगती है, आखिरकार उन्हें एक केंद्रीय सांठगांठ वाले रिपॉजिटरी द्वारा प्रबंधित किया जाता है, जो नियमित अंतराल में पुराने स्नैपशॉट को हटाने में सक्षम है।

समस्या स्थानीय डेवलपर कार्यस्थान हैं। अपने स्थानीय भंडार जल्दी हो जाना है बहुत अनूठा फोटो के साथ बड़े।

इस समस्या से कैसे निपटें?

अभी मैं फोलोइंग संभावित समाधान देखता हूं:

  • डेवलपर्स को नियमित अंतराल में रिपॉजिटरी को शुद्ध करने के लिए कहें (जिसके कारण बहुत अधिक फ़ुर्सत होती है, क्योंकि इसे हटाने में लंबा समय लगता है और ज़रूरत से ज़्यादा सब कुछ डाउनलोड करने में भी)
  • कुछ स्क्रिप्ट सेट करें जो स्थानीय भंडार से सभी स्नैपशॉट निर्देशिकाओं को हटाती है और डेवलपर्स को उस स्क्रिप्ट को समय-समय पर चलाने के लिए कहती है (पहले की तुलना में बेहतर है, लेकिन फिर भी वर्तमान स्नैपशॉट को चलाने और डाउनलोड करने में काफी समय लगता है)
  • निर्भरता का उपयोग करें: पर्ज-लोकल-रिपॉजिटरी प्लगइन (क्या समस्या है जब ग्रहण से चलने वाली, खुली फाइलों के कारण, प्रत्येक प्रोजेक्ट से चलाने की आवश्यकता है)
  • हर कार्य केंद्र पर सांठगांठ स्थापित करें और पुराने स्नैपशॉट को साफ करने के लिए एक नौकरी स्थापित करें (सर्वोत्तम परिणाम, लेकिन मैं 50+ नेक्सस सर्वर को बनाए रखना नहीं चाहता, साथ ही मेमोरी हमेशा डेवलपर के वर्कस्टेशन पर तंग है)
  • SNAPSHOTS का उपयोग बिल्कुल बंद कर दें

अपने हार्ड ड्राइव के स्थान को भरने से अपने स्थानीय भंडार को रखने का सबसे अच्छा तरीका क्या है?

अपडेट करें:

बीवी को सत्यापित करने के लिए और अधिक जानकारी देने के लिए मैं एक छोटा सा नेक्सस सर्वर सेटअप करता हूं, दो प्रोजेक्ट (ए और बी) का निर्माण करता है और कोशिश करता हूं:

ए:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>de.glauche</groupId>
  <artifactId>a</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <distributionManagement>
    <snapshotRepository>
        <id>nexus</id>
        <name>nexus</name>
        <url>http://server:8081/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
  </distributionManagement>

</project>

ख:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>de.glauche</groupId>
  <artifactId>b</artifactId>
  <version>0.0.1-SNAPSHOT</version>
    <distributionManagement>
    <snapshotRepository>
        <id>nexus</id>
        <name>nexus</name>
        <url>http://server:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
  </distributionManagement>
 <repositories>
    <repository>
        <id>nexus</id>
        <name>nexus</name>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <url>http://server:8081/nexus/content/repositories/snapshots/</url>
    </repository>
 </repositories>
  <dependencies>
    <dependency>
        <groupId>de.glauche</groupId>
        <artifactId>a</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>
</project>

अब, जब मैं मावेन का उपयोग करता हूं और "ए" पर "तैनाती" चलाता हूं, तो मेरे पास होगा

a-0.0.1-SNAPSHOT.jar
a-0.0.1-20101204.150527-6.jar
a-0.0.1-SNAPSHOT.pom
a-0.0.1-20101204.150527-6.pom

स्थानीय भंडार में। एक नए टाइमस्टैम्प संस्करण के साथ मैं हर बार तैनाती लक्ष्य को चलाता हूं। जब मैं नेक्सस सर्वर से स्नैपशॉट को अपडेट करने की कोशिश करता हूं, तो ऐसा ही होता है (प्रोजेक्ट को "बंद करें", स्थानीय रिपॉजिटरी से हटाएं, "बी" बनाएं)

ऐसे वातावरण में जहां बहुत सारे स्नैपशॉट बनते हैं (लगता है कि हडसन सर्वर ...), स्थानीय रिपोसियोटी पुराने संस्करणों के साथ तेजी से भर जाता है

अपडेट 2:

यह कैसे और क्यों विफल हो रहा है यह जांचने के लिए मैंने कुछ और परीक्षण किए। प्रत्येक परीक्षण स्वच्छ सब कुछ के खिलाफ चलाया जाता है (डी / ग्लूशे को मशीनों और नेक्सस दोनों से हटा दिया जाता है)

  • मावेन 2.2.1 के साथ तैनात है:

मशीन A पर स्थानीय रिपॉजिटरी में स्नैपशॉट।जर + स्नैपशॉट-टाइमस्टैम्प.जर होता है

बट: नेक्सस में केवल एक टाइमस्टैम्प्ड जार, मेटाडेटा पढ़ता है:

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>de.glauche</groupId>
  <artifactId>a</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <versioning>
    <snapshot>
      <timestamp>20101206.200039</timestamp>

      <buildNumber>1</buildNumber>
    </snapshot>
    <lastUpdated>20101206200039</lastUpdated>
  </versioning>
</metadata>
  • चलाने की निर्भरता (मशीन B पर) में अद्यतन करें m2eclipse (एम्बेडेड m3 फाइनल) -> स्थानीय भंडार में स्नैपशॉट है। + स्नैपशॉट- टाइमस्टैम्प.जर :(
  • बाहरी मावेन 2.2.1 के साथ रन पैकेज लक्ष्य -> ​​स्थानीय रिपॉजिटरी में स्नैपशॉट है। स्नैपशॉट-टाइमस्टैम्प.जर ...

ठीक है, अगले maven 3.0.1 के साथ प्रयास करें (परियोजना के सभी निशान हटाने के बाद)

  • मशीन पर स्थानीय भंडार बेहतर दिखता है, केवल एक गैर-टाइमस्टैम्पड जार

  • नेक्सस में केवल एक टाइमस्टैम्प्ड जार, मेटाडेटा पढ़ता है:

    de.glauche एक 0.0.1-स्नैपशॉट

    <snapshot>
      <timestamp>20101206.201808</timestamp>
      <buildNumber>3</buildNumber>
    </snapshot>
    <lastUpdated>20101206201808</lastUpdated>
    <snapshotVersions>
      <snapshotVersion>
        <extension>jar</extension>
        <value>0.0.1-20101206.201808-3</value>
        <updated>20101206201808</updated>
      </snapshotVersion>
      <snapshotVersion>
        <extension>pom</extension>
        <value>0.0.1-20101206.201808-3</value>
        <updated>20101206201808</updated>
      </snapshotVersion>
    </snapshotVersions>
    

  • चलाने की निर्भरता (मशीन B पर) में अद्यतन करें m2eclipse (एम्बेडेड m3 फाइनल) -> स्थानीय भंडार में स्नैपशॉट है। + स्नैपशॉट- टाइमस्टैम्प.जर :(

  • बाहरी मावेन 2.2.1 के साथ रन पैकेज लक्ष्य -> ​​स्थानीय रिपॉजिटरी में स्नैपशॉट है। स्नैपशॉट-टाइमस्टैम्प.जर ...

इसलिए, पुनरावृत्ति करने के लिए: maven3 में "परिनियोजित" लक्ष्य 2.2.1 से बेहतर काम करता है, बनाने वाली मशीन पर स्थानीय भंडार ठीक दिखता है। लेकिन, रिसीवर हमेशा समयबद्ध संस्करणों के बहुत से समाप्त होता है ...

मैं क्या गलत कर रहा हूं ?

अपडेट ३

मैंने विभिन्न अन्य विन्यासों का भी परीक्षण किया, पहले नेक्सस को आर्टिफैक्टिक के साथ बदल दिया -> समान व्यवहार। फिर रिपोजिटरी मैनेजर से स्नैपशॉट डाउनलोड करने के लिए linux maven 3 क्लाइंट का उपयोग करें -> लोकल रिपॉजिटरी में अभी भी टाइमस्टैम्प्ड स्नैपशॉट हैं :(


संबंधित प्रश्न, केवल स्थानीय .m2 \ रिपोजिटरी भाग के बारे में, (जेनकिन्स) बिल्ड सर्वर पर स्थानीय रिपॉजिटरी पर केंद्रित: stackoverflow.com/q/9729076/223837
मार्निक्स क्लोस्टर रिंस्टेटमेटिका

यहाँ Apcahe Maven Comptability Notes - cwiki.apache.org/confluence/display/MAVEN/…
aka_sh

जवाबों:


36

<uniqueVersion>विन्यास कलाकृतियों कि तैनात किया गया था (mvn तैनाती के माध्यम से) नेक्सस के रूप में एक Maven भंडार इस तरह के लिए आवेदन किया।

नेक्सस से इन्हें हटाने के लिए, आप हर दिन SNAPSHOT रिपॉजिटरी को शुद्ध करने के लिए आसानी से एक स्वचालित नौकरी बना सकते हैं। यह निश्चित संख्या में शापशॉट्स को बनाए रखने या उन्हें निश्चित अवधि के लिए रखने के लिए कॉन्फ़िगर किया जा सकता है। इसकी सुपर आसान और महान काम करता है।

एक डेवलपर मशीन पर स्थानीय रिपॉजिटरी में कलाकृतियों को "इंस्टॉल" लक्ष्य से वहाँ मिलता है और इन टाइमस्टैम्प का उपयोग नहीं करते हैं ... वे केवल एक और केवल स्नैपशॉट संस्करण की जगह लेते रहते हैं जब तक कि आप संशोधन संख्या में वृद्धि नहीं कर रहे हैं (जैसे 1.0.0- SNAPSHOT से 1.0.1-SNAPSHOT)।


1
समस्या यह है, कि कई डेवलपर्स के साथ वितरित एन्वायरमेंट में "इंस्टॉल" लक्ष्य का इतना उपयोग नहीं है। हम एक हडसन सर्वर का भी उपयोग करते हैं जो प्रत्येक cvs पर नए स्नैपशॉट का निर्माण (और तैनाती) करता है, जो कि प्रत्येक दिन काफी बार होता है। मुझे पता था कि नेक्सस स्नैपशॉट डिलीट मेचिन्सम के बारे में है, संभावित वर्कअराउंड की सूची देखें।
mglauche

प्रत्येक विकास मशीन के नीचे एक "स्थानीय" भंडार होना चाहिए ~/.m2/repositoryऔर प्रत्येक pom.xmlमें एक रिपॉजिटरी परिभाषा होनी चाहिए जो आपके लैन पर नेक्सस के एक एकल उदाहरण की ओर इशारा करती है। (जैसा आप दिखाते हैं)। हमने हडसन के साथ मिलकर यह स्थापित किया है जो हर तोड़फोड़ की प्रतिबद्धता पर आधारित है और यह बहुत अच्छा काम करता है। SNAPSHOT नेक्सस में एड को "तैनात" किया जाता है जहां वे एकत्रित होते हैं और साप्ताहिक रूप से शुद्ध होते हैं। डेवलपर मशीनें नेक्सस से नवीनतम SNAPSHOT को स्वचालित रूप से डाउनलोड करती हैं ~/.m2/repositoryऔर यह पहले डाउनलोड किए गए को बदल देती है। डेवलपर्स के पास अपना नेक्सस उदाहरण कभी नहीं होना चाहिए।
HDave

2
मैं सिर्फ आपके अपडेट को पढ़ता हूं और इसमें एक और बात जोड़नी है: टाइमस्टैम्प्ड कलाकृतियों को आपके स्थानीय (~ / .m2 / रिपॉजिटरी) रिपॉजिटरी के अंदर कभी नहीं देखना चाहिए। यदि वे हैं, तो कुछ गलत है। उन्हें केवल नेक्सस के अंदर देखा जाना चाहिए। नेक्सस के अंदर, हाँ, वे जल्दी से इकट्ठा करते हैं। संभावित रूप से एक दिन में सैकड़ों एम.बी. एक नेक्सस नौकरी मात्रा को छोटा रखने के लिए इन दैनिक शुद्ध कर सकते हैं।
एचडीव्यू

6
वे निश्चित रूप से स्थानीय रिपॉजिटरी (~ / .m2 / रिपॉजिटरी वन) में अंत करते हैं, वे "परिनियोजित" लक्ष्य को चलाने के बाद और एमवाय-यू पर निर्भर परियोजना (यानी बी प्रोजेक्ट) पर स्थापित होने के बाद समाप्त होते हैं । मैंने इसका परीक्षण मावेन 2.2.1 और मावेन 3 के साथ भी किया था, दोनों का व्यवहार समान है।
mglauche

2
मुझे लगता है कि मैं इसे अभी प्राप्त करता हूं ... वे वहां दिखाई नहीं देते हैं जब विकास एक "तैनात" करता है, लेकिन जब डेवलपर एक आश्रित परियोजना का निर्माण करता है। उस समय, अपस्ट्रीम प्रोजेक्ट के नवीनतम स्नैपशॉट को नेक्सस से ~ / .m2 / रिपॉजिटरी में फ़ाइल नाम के भाग के रूप में टाइमस्टैम्प के साथ बरकरार रखा गया है। क्या यह सही है?
एचडीएवी

13

यह प्लगइन स्थानीय रिपॉजिटरी से प्रोजेक्ट की कलाकृतियों को हटा देता है। बड़े स्थानीय स्नैपशॉट की केवल एक प्रति रखने के लिए उपयोगी है।

<plugin>         
    <groupId>org.codehaus.mojo</groupId>         
    <artifactId>build-helper-maven-plugin</artifactId>         
    <version>1.7</version>         
    <executions>           
        <execution>             
            <id>remove-old-artifacts</id>             
            <phase>package</phase>             
            <goals>               
                <goal>remove-project-artifact</goal>             
            </goals>            
            <configuration>  
                <removeAll>true</removeAll><!-- When true, remove all built artifacts including all versions. When false, remove all built artifacts of this project version -->             
            </configuration>          
        </execution>         
    </executions>       
</plugin>

7

वैसे मुझे कोई भी प्रस्तावित समाधान पसंद नहीं आया। मावेन कैश को हटाने से अक्सर नेटवर्क ट्रैफ़िक बढ़ता है और बिल्ड प्रोसेस धीमा हो जाता है। बिल्ड-हेल्पर-मावेन-प्लगइन केवल एक विरूपण साक्ष्य के साथ मदद करता है, मैं चाहता था कि समाधान एक स्थानीय कमांड से सभी पुराने टाइमस्टैम्प्ड स्नैपशॉट कलाकृतियों को शुद्ध कर सके। कुछ दिनों की खोज के बाद, मैंने हार मान ली और छोटे कार्यक्रम लिखने का फैसला किया। लगता है कि अंतिम कार्यक्रम हमारे वातावरण में काफी अच्छा काम कर रहा है। इसलिए मैंने इसे दूसरों के साथ साझा करने का फैसला किया, जिन्हें इस तरह के उपकरण की आवश्यकता हो सकती है। सूत्रों को जीथब से खींचा जा सकता है: https://github.com/nadestin/tools/tree/master/MavenCacheCleanup


@ मैंने यहां पोम के टुकड़े को ठीक से प्रारूपित करने का प्रबंधन नहीं किया है, इसे https://github.com/nadestin/tools/wiki/m2cachecleanup-maven-plugin पर देखें । हमारे जेनकींस पर यह उपयोगिता प्रति दिन डिस्क स्थान की ~ 200Mb की पुनरावृत्ति करती है।
युरिनडेस्टिन

2

जहाँ तक इस के दूरस्थ रिपॉजिटरी टुकड़े की बात है, मुझे लगता है कि पिछले जवाब जो कि एक नियमित अंतराल पर SNAPSHOTs के शुद्धिकरण पर चर्चा करेंगे, काम करेंगे। लेकिन किसी ने भी आपके प्रश्न के स्थानीय-डेवलपर वर्कस्टेशन सिंक्रोनाइज़ेशन भाग को संबोधित नहीं किया है।

हमने अभी तक Maven3 का उपयोग शुरू नहीं किया है, इसलिए हमने अभी तक SNAPSHOTs को स्थानीय मशीनों पर बनाना शुरू करना नहीं देखा है।

लेकिन हमें m2eclipse के साथ अलग-अलग समस्याएं हुई हैं। जब हमारे पास "कार्यक्षेत्र रिज़ॉल्यूशन" सक्षम होता है और परियोजना हमारे कार्यक्षेत्र में मौजूद होती है, तो स्रोत अद्यतन आमतौर पर हमें रक्तस्राव के किनारे पर रखते हैं। लेकिन हमने पाया है कि Nexus में हाल ही में प्रकाशित कलाकृतियों के साथ खुद को अपडेट करने के लिए m2eclipse प्राप्त करना बहुत मुश्किल है। हम अपनी टीम के भीतर समान समस्याओं का सामना कर रहे हैं और यह विशेष रूप से समस्याग्रस्त है क्योंकि हमारे पास एक बहुत बड़ी परियोजना का ग्राफ है ... बहुत सारी निर्भरताएं हैं जो आपके कार्यक्षेत्र में नहीं होंगी, लेकिन SNAPSHOTs को अक्सर प्रकाशित किया जाएगा।

मुझे पूरा यकीन है कि यह m2eclipse में एक मुद्दे पर वापस उबलता है जहां यह SNAPSHOTs को ठीक से संभाल नहीं करता है जैसा कि इसे करना चाहिए। आप ग्रहण के भीतर मावेन कंसोल में देख सकते हैं जहां m2eclipse आपको बताता है कि यह हाल ही में प्रकाशित SNAPSHOT के अद्यतन को छोड़ रहा है क्योंकि इसे कैश्ड संस्करण मिला है। आप एक रन विन्यास से या कमांड लाइन से एक यू करते हैं, Maven मेटाडाटा परिवर्तन लेने होंगे। लेकिन एक "अपडेट स्नैपशॉट ..." चयन को एमपेक्लिप्स को बताना चाहिए कि मावेन ने इस कैश को समाप्त कर दिया है। यह साथ पारित होने के लिए प्रकट नहीं होता है। ऐसा प्रतीत होता है कि वहाँ एक बग है जो इसके लिए दायर किया गया है यदि आप इसके लिए मतदान करना चाहते हैं: https://issues.sonatype.org/browse/MNGECLIPSE-2608

इसका जिक्र आपने एक टिप्पणी में कहीं।

इस समस्या के लिए सबसे अच्छा समाधान यह प्रतीत होता है कि डेवलपर्स ने अपने स्थानीय वर्कस्टेशनों को तब शुद्ध किया है, जब चीजें m2eclipse से टूटने लगती हैं। एक अलग समस्या के लिए इसी तरह के समाधान ... दूसरों ने मावेन 2.2.1 और 3 बैकिंग एमफ्लिप के साथ समस्याओं की रिपोर्ट की है, और मैंने वही देखा है।

मुझे आशा है कि यदि आप Maven3 का उपयोग कर रहे हैं, तो आप इसे केवल नवीनतम SNAPSHOT को खींचने के लिए कॉन्फ़िगर कर सकते हैं, और कैश कर सकते हैं कि रिपॉजिटरी कितने समय के लिए कहती है (या जब तक आप इसे हाथ से समाप्त नहीं करते)। उम्मीद है कि तब आपको अपने स्थानीय भंडार में बैठे SNAPSHOTs का एक समूह होने की आवश्यकता नहीं होगी।

जब तक आप एक बिल्ड सर्वर के बारे में बात नहीं कर रहे हैं जो मैन्युअल रूप से कर रहा है mvn installउन पर। जहाँ तक SNAPSHOTs को बिल्ड सर्वर जैसे वातावरण में निर्माण करने से कैसे रोका जाए, हमने एक तरह से यह दावा किया है कि प्रत्येक बिल्ड अपने स्वयं के कार्यक्षेत्र और स्थानीय रिपॉजिटरी का उपयोग करके बुलेट (हालांकि, मावेन 2.2.1 में, कुछ खास चीजें जैसे) POMs हमेशा ~ / .m2 / रिपॉजिटरी से बाहर आते हैं लगता है) अतिरिक्त स्नैपशॉट वास्तव में केवल एक ही बिल्ड के लिए चारों ओर चिपकते हैं और फिर वे गिर जाते हैं (और फिर से खरोंच से डाउनलोड किया जाता है)। इसलिए हमने देखा है कि इस दृष्टिकोण को शुरू करने के लिए अधिक स्थान खाने से खत्म हो जाता है, लेकिन यह सब कुछ एकल रिपॉजिटरी से हल होने की तुलना में अधिक स्थिर रहता है। यह विकल्प (हडसन पर) को "निजी मावेन रिपॉजिटरी का उपयोग करें" कहा जाता है और जब आप मावेन के साथ निर्माण करने के लिए चुने जाते हैं तो प्रोजेक्ट कॉन्फ़िगरेशन पर बिल्ड अनुभाग के उन्नत बटन के नीचे होता है। यहाँ उस विकल्प के लिए सहायता विवरण दिया गया है:

आम तौर पर, हडसन स्थानीय मावेन रिपॉजिटरी का उपयोग करता है जैसा कि मावेन द्वारा निर्धारित किया गया है - सटीक प्रक्रिया अनिर्दिष्ट लगती है, लेकिन यह ~ / .m2 / रिपॉजिटरी है और इसे ~ / .m2 / .xml द्वारा अधिलेखित किया जा सकता है (अधिक विवरण के लिए संदर्भ देखें। ।) इसका सामान्य रूप से मतलब है कि एक ही नोड पर निष्पादित सभी नौकरियां एक एकल मेवेन भंडार को साझा करती हैं। इसका उल्टा यह है कि आप डिस्क स्थान को बचा सकते हैं, लेकिन इसका नकारात्मक पक्ष यह है कि कभी-कभी जो निर्माण करते हैं वे एक-दूसरे के साथ हस्तक्षेप कर सकते हैं। उदाहरण के लिए, आप अंत में गलत तरीके से सफल होने का कारण बन सकते हैं, सिर्फ इसलिए कि आपके स्थानीय रिपॉजिटरी में सभी निर्भरताएं हैं, इस तथ्य के बावजूद कि पीओएम में कोई भी रिपॉजिटरी उनके पास नहीं है।

समान स्थानीय भंडार का उपयोग करने की कोशिश कर रही समवर्ती मावेन प्रक्रियाओं के संबंध में कुछ रिपोर्ट की गई समस्याएं भी हैं।

जब इस विकल्प की जाँच की जाती है, हडसन मावेन को स्थानीय मावेन भंडार के रूप में $ WORKSPACE / .repository का उपयोग करने के लिए कहेगा। इसका मतलब है कि प्रत्येक नौकरी को अपने लिए अलग-थलग मावेन भंडार मिलेगा। यह अतिरिक्त डिस्क स्थान की खपत पर, उपरोक्त समस्याओं को ठीक करता है।

इस विकल्प का उपयोग करते समय, एक Maven विरूपण साक्ष्य प्रबंधक स्थापित करने पर विचार करें ताकि आपको दूरस्थ Maven रिपॉजिटरी को बहुत बार हिट न करना पड़े।

यदि आप हडसन पर निष्पादित सभी मावेन नौकरियों में इस मोड को सक्रिय करना पसंद करते हैं, तो यहां वर्णित तकनीक का संदर्भ लें।

आशा है कि यह मदद करता है - अगर यह आपकी समस्या का समाधान नहीं करता है तो कृपया मुझे बताएं कि मैं कहां चूक गया हूं।


ऊपर उल्लिखित बग को ठीक कर दिया गया है: bugs.eclipse.org/bugs/show_bug.cgi?id=339527
HDave

1

ग्रोव में , टाइमस्टैम्प की गई फ़ाइलों को हटाना artifact-0.0.1-20101204.150527-6.jarबहुत सरल हो सकता है:

root = 'path to your repository'

new File(root).eachFileRecurse {
  if (it.name.matches(/.*\-\d{8}\.\d{6}\-\d+\.[\w\.]+$/)) {
    println 'Deleting ' + it.name
    it.delete()
  }
}

ग्रूवी स्थापित करें , स्क्रिप्ट को एक फ़ाइल में सहेजें और प्रत्येक सप्ताह में निष्पादन को शेड्यूल करें, शुरू करें, लॉगऑन करें, जो भी आपको सूट करता है।

या, आप maven build में भी gmavenplus-plugin का उपयोग करके निष्पादन को तार कर सकते हैं । ध्यान दें, संपत्ति में मावेन द्वारा रिपॉजिटरी स्थान कैसे निर्धारित किया जाता है settings.localRepositoryऔर फिर चर में कॉन्फ़िगरेशन के माध्यम से बांधा जाता है repository:

  <plugin>
    <groupId>org.codehaus.gmavenplus</groupId>
    <artifactId>gmavenplus-plugin</artifactId>
    <version>1.3</version>
    <executions>
      <execution>
        <phase>install</phase>
        <goals>
          <goal>execute</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <properties>
        <property>
          <name>repository</name>
          <value>${settings.localRepository}</value>
        </property>
      </properties>
      <scripts>
        <script><![CDATA[
          new File(repository).eachFileRecurse {
            if (it.name.matches(/.*\-\d{8}\.\d{6}\-\d+\.[\w\.]+$/)) {
              println 'Deleting snapshot ' + it.getAbsolutePath()
              it.delete()
            }
          }
        ]]></script>
      </scripts>
    </configuration>
    <dependencies>
      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-all</artifactId>
        <version>2.3.7</version>
        <scope>runtime</scope>
      </dependency>
    </dependencies>
  </plugin>  

0

अपनी POM फ़ाइल में निम्न पैरामीटर जोड़ें

पोम

<configuration>
<outputAbsoluteArtifactFilename>true</outputAbsoluteArtifactFilename>
</configuration>

https://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html

पीओएम उदाहरण

<plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.10</version>
        <executions>
          <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>3.8.1</version>
                  <type>jar</type>
                  <overWrite>false</overWrite>
                  <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
                  <destFileName>optional-new-name.jar</destFileName>
                </artifactItem>
              </artifactItems>
              **<outputAbsoluteArtifactFilename>true</outputAbsoluteArtifactFilename>**
              <outputDirectory>${project.build.directory}/wars</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>true</overWriteSnapshots>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

जेनकिंस में कॉन्फ़िगर करें:

// copy artifact 
copyMavenArtifact(artifact: "commons-collections:commons-collections:3.2.2:jar", outputAbsoluteArtifactFilename: "${pwd()}/target/my-folder/commons-collections.jar")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.