अब उस मावेन -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 क्लाइंट का उपयोग करें -> लोकल रिपॉजिटरी में अभी भी टाइमस्टैम्प्ड स्नैपशॉट हैं :(