উত্তর:
মাভেনের একটি স্ন্যাপশট সংস্করণ হ'ল এটি প্রকাশিত হয়নি।
ধারণাটি হ'ল একটি মুক্তি (বা অন্য কোনও প্রকাশ) হওয়ার আগে1.0
, সেখানে একটি রয়েছে 1.0-SNAPSHOT
। যে সংস্করণটি হয়ে উঠতে পারে 1.0
। এটি মূলত " 1.0
বিকাশাধীন"। এটি বাস্তব রিলিজের কাছাকাছি হতে পারে 1.0
বা বেশ দূরে ( 0.9
উদাহরণস্বরূপ মুক্তির পরে )।
একটি "আসল" সংস্করণ এবং স্ন্যাপশট সংস্করণের মধ্যে পার্থক্য হ'ল স্ন্যাপশটগুলি আপডেট পেতে পারে। এর অর্থ হ'ল 1.0-SNAPSHOT
আজ ডাউনলোড করা গতকাল বা কালকে ডাউনলোড করার চেয়ে আলাদা ফাইল দিতে পারে।
সাধারণত, স্ন্যাপশট নির্ভরতা কেবল বিকাশের সময় উপস্থিত থাকতে হবে এবং কোনও প্রকাশিত সংস্করণ (অর্থাত্ নন-স্ন্যাপশট নয়) স্ন্যাপশট সংস্করণে নির্ভরতা থাকা উচিত।
1.0-DEVELOPMENT
" বা " 1.0-INPROGRESS
" পছন্দ করতে পারে না, কেন লোকেরা
অন্য তিনটি উত্তর আপনাকে -SNAPSHOT
সংস্করণ কী তা সম্পর্কে একটি ভাল দৃষ্টি সরবরাহ করে । আমি যখন ম্যাভেনের SNAPSHOT
নির্ভরতা পাই তখন তার আচরণ সম্পর্কিত কিছু তথ্য যুক্ত করতে চেয়েছিলাম ।
আপনি যখন কোনও অ্যাপ্লিকেশন তৈরি করবেন, মাভেন স্থানীয় সংগ্রহস্থলে নির্ভরতাগুলি অনুসন্ধান করবে । যদি সেখানে কোনও স্থিতিশীল সংস্করণ পাওয়া যায় না, তবে এই নির্ভরতা পুনরুদ্ধার করতে এটি দূরবর্তী সংগ্রহস্থলগুলিতে (সংজ্ঞায়িত settings.xml
বা এর মধ্যে pom.xml
) অনুসন্ধান করবে । তারপরে, এটি পরবর্তী বিল্ডগুলির জন্য উপলব্ধ করার জন্য এটি স্থানীয় সংগ্রহস্থলে অনুলিপি করবে।
উদাহরণস্বরূপ, একটি foo-1.0.jar
লাইব্রেরি একটি স্থিতিশীল সংস্করণ হিসাবে বিবেচিত হয় এবং যদি মাভেন এটি স্থানীয় সংগ্রহস্থলে খুঁজে পায় তবে এটি বর্তমান বিল্ডের জন্য এটি ব্যবহার করবে।
এখন, আপনার যদি কোনও foo-1.0-SNAPSHOT.jar
লাইব্রেরি দরকার হয় তবে মাভেন জানতে পারবেন যে এই সংস্করণটি স্থিতিশীল নয় এবং এটি পরিবর্তনের বিষয়। এই কারণেই মাভেন দূরবর্তী সংগ্রহস্থলগুলিতে একটি নতুন সংস্করণ সন্ধান করার চেষ্টা করবেন, এমনকি এই লাইব্রেরির কোনও সংস্করণ স্থানীয় সংগ্রহস্থলে পাওয়া গেলেও। তবে এই চেকটি প্রতিদিন একবার করেই করা হয়। এর অর্থ foo-1.0-20110506.110000-1.jar
হ'ল যদি আপনার স্থানীয় সংগ্রহস্থলটিতে একটি (যেমন এই লাইব্রেরিটি ২০১১/০6/২০১:00 তারিখে 11:00:00 এ তৈরি করা হয়েছে) এবং যদি আপনি একই দিনে মাভেন বিল্ড চালনা করেন তবে মাভেন সংগ্রহশালাটি চেক করবেন না আরও নতুন সংস্করণের জন্য।
মাভেন আপনাকে আপনার সংগ্রহস্থল সংজ্ঞাতে এই আপডেট নীতিটি পরিবর্তন করার একটি উপায় সরবরাহ করে:
<repository>
<id>foo-repository</id>
<url>...</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>XXX</updatePolicy>
</snapshots>
</repository>
কোথায় XXX
হতে পারে:
SNAPSHOT
সংস্করণ স্থিতিশীল লাইব্রেরি হিসাবে পরিচালনা করা হবে।SNAPSHOT
সংস্করণ: mvn clean package -U
যেমন প্রতি ম্যাভেন টিউটোরিয়াল
-U
পতাকা সহ যত্নবান । এটি MNG-4142 এর কারণে আপনি যা প্রত্যাশা করছেন তা নাও করতে পারে ।
mvn install
আমার স্থানীয় রেপোতে 1.0-SNAPSHOT সংস্করণের একটি জার ইনস্টল করতে দৌড়েছি । পরের দিন আমি প্রকল্পে পরিবর্তন করেছিলাম কিন্তু সংস্করণটি পরিবর্তন mvn install
করি নি - তখন এটি যখন চালানো হয় তখন আমার স্থানীয় রেপোতে এটি পরিবর্তন হয় না বলে মনে হয়। এটা কি প্রত্যাশিত আচরণ? আমি কি কোনও সংস্করণ পুনরায় ব্যবহার করতে এবং এটিতে mvn install
পরিবর্তন করার পরে এটি ওভাররাইট করতে পারি না?
"SNAPSHOT" শব্দটির অর্থ বিল্ডটি একটি নির্দিষ্ট সময়ে আপনার কোডের একটি স্ন্যাপশট।
এর অর্থ সাধারণত যে এই সংস্করণটি এখনও ভারী বিকাশের মধ্যে রয়েছে।
কোডটি প্রস্তুত হয়ে গেলে এবং এটি প্রকাশের সময় হলে আপনি পিওএম-এ তালিকাভুক্ত সংস্করণটি পরিবর্তন করতে চান। তারপরে "SNAPSHOT" না হয়ে আপনি "1.0" এর মতো লেবেল ব্যবহার করবেন।
ভার্সন সঙ্গে কিছু সাহায্যের জন্য, চেক আউট শব্দার্থিক ভারশনিং স্পেসিফিকেশন ।
একটি "রিলিজ" হ'ল এমন কোনও সংস্করণের চূড়ান্ত বিল্ড যা পরিবর্তন হয় না।
একটি "স্ন্যাপশট" এমন একটি বিল্ড যা অন্য বিল্ড দ্বারা প্রতিস্থাপিত হতে পারে যার একই নাম রয়েছে। এটি সূচিত করে যে বিল্ডটি যে কোনও সময় পরিবর্তিত হতে পারে এবং এখনও সক্রিয় বিকাশের অধীনে রয়েছে।
আপনার কাছে একই কোডের উপর ভিত্তি করে বিভিন্ন বিল্ডের জন্য বিভিন্ন শিল্পকর্ম রয়েছে। যেমন আপনার একটি ডিবাগিং এবং একটি ছাড়া থাকতে পারে। জাভা 5.0 এর জন্য একটি এবং জাভা 6 এর জন্য একটি সাধারণভাবে এটির বিল্ড থাকা সহজতর যা আপনার প্রয়োজনীয় সমস্ত কাজ করে। ;)
ম্যাভেন সংস্করণগুলিতে একটি প্রকল্প বর্তমানে সক্রিয় বিকাশের অধীনে রয়েছে তা বোঝাতে স্ট্রিং আক্ষরিক "SNAPSHOT" থাকতে পারে।
উদাহরণস্বরূপ, যদি আপনার প্রকল্পের "1.0-SNAPSHOT" সংস্করণ থাকে এবং আপনি এই প্রকল্পের শিল্পকর্মগুলি একটি মাভেন সংগ্রহস্থলে স্থাপন করেন, মাভেন এই সংস্করণটি "1.0-20080207-230803-1" এ প্রসারিত করবেন যদি আপনি 11-এ একটি প্রকাশ প্রকাশ করেন তবে : 8 ফেব্রুয়ারী, 2008 সকাল 8 টা ইউটিসি। অন্য কথায়, আপনি যখন স্ন্যাপশট স্থাপন করেন, আপনি কোনও সফ্টওয়্যার উপাদান প্রকাশ করতে পারবেন না; আপনি একটি নির্দিষ্ট সময়ে কোনও উপাদানটির স্ন্যাপশট প্রকাশ করছেন।
সুতরাং স্ন্যাপশট সংস্করণগুলি সক্রিয় বিকাশের অধীনে প্রকল্পগুলির জন্য ব্যবহৃত হয়। যদি আপনার প্রকল্পটি সক্রিয় বিকাশের অধীনে থাকা কোনও সফ্টওয়্যার উপাদানটির উপর নির্ভর করে তবে আপনি কোনও স্ন্যাপশট প্রকাশের উপর নির্ভর করতে পারেন এবং আপনি যখন কোনও বিল্ড পরিচালনা করেন তখন মাভেন পর্যায়ক্রমে একটি সংগ্রহস্থল থেকে সর্বশেষতম স্ন্যাপশটটি ডাউনলোড করার চেষ্টা করবেন। একইভাবে, যদি আপনার সিস্টেমের পরবর্তী প্রকাশটি একটি সংস্করণ "1.8" করতে চলেছে তবে আনুষ্ঠানিকভাবে প্রকাশ না হওয়া পর্যন্ত আপনার প্রকল্পের একটি "1.8-এসএনএপশট" সংস্করণ থাকবে।
উদাহরণস্বরূপ, নিম্নলিখিত নির্ভরতা সর্বদা বসন্তের সর্বশেষ 1.8 বিকাশ জেআর ডাউনলোড করবে:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>1.8-SNAPSHOT”</version>
</dependency>
ম্যাভেন রিলিজ প্রক্রিয়াটির একটি উদাহরণ
আমি পরিভাষা সম্পর্কে একটি বিষয় বলতে চাই। অন্যান্য উত্তরগুলি মাভেনের প্রসঙ্গে "স্ন্যাপশট" সংস্করণটি কী তা সম্পর্কে ভাল ব্যাখ্যা দিয়েছে। তবে এটি কি অনুসরণ করে যে কোনও নন-স্ন্যাপশট সংস্করণকে একটি "রিলিজ" সংস্করণ বলা উচিত?
একটি "রিলিজ" সংস্করণটির অর্থগত সংস্করণ ধারণার মধ্যে কিছুটা উত্তেজনা রয়েছে, এটি এমন কোনও সংস্করণ বলে মনে হয় যার একটি বাছাইকারী যেমন নেই -SNAPSHOT
তবে কোয়ালিফায়ার যেমন নেই -beta.4
; এবং মাভেনের একটি "রিলিজ" সংস্করণ সম্পর্কিত ধারণা, যা কেবলমাত্র অনুপস্থিতির অন্তর্ভুক্ত বলে মনে হয় -SNAPSHOT
।
অন্য কথায়, "মুক্তি" এর অর্থ "আমরা এটিকে ম্যাভেন সেন্ট্রালে প্রকাশ করতে পারি" বা "সফ্টওয়্যারটি সর্বসাধারণের কাছে চূড়ান্ত প্রকাশে রয়েছে" কিনা এর একটি অর্থপূর্ণ অস্পষ্টতা রয়েছে। আমরা -beta.4
যদি এটি জনসাধারণের কাছে প্রকাশ করি তবে আমরা একটি "রিলিজ" সংস্করণ হিসাবে বিবেচনা করতে পারি, তবে এটি কোনও "চূড়ান্ত প্রকাশ" নয়। অর্থপূর্ণ সংস্করণটি স্পষ্টভাবে বলেছে যে এর মতো -beta.4
কিছু একটি "প্রাক-রিলিজ" সংস্করণ, সুতরাং এটি "রিলিজ" সংস্করণ বলা ছাড়া কোনও অর্থই হবে না -SNAPSHOT
। প্রকৃতপক্ষে সংজ্ঞা অনুসারে -rc.5
প্রকাশের প্রার্থী , প্রকৃত প্রকাশ নয়, যদিও আমরা পরীক্ষার জন্য জনসাধারণের অ্যাক্সেসের অনুমতি দিতে পারি।
মাভেন তবুও, আমার মতে এটি কেবলমাত্র একটি "রিলিজ" সংস্করণ কল করা আরও উপযুক্ত বলে মনে হয় যার কোনও যোগ্যতা নেই, এমনকি নয় -beta.4
। ম্যাভেন নন-স্ন্যাপশট সংস্করণের জন্য সম্ভবত আরও ভাল নামটি একটি "স্থিতিশীল" সংস্করণ হবে ( অন্য উত্তর দ্বারা অনুপ্রাণিত )। এইভাবে আমাদের হবে:
1.2.3-beta.4-SNAPSHOT
: প্রাক-প্রকাশ সংস্করণের একটি স্ন্যাপশট সংস্করণ।1.2.3-SNAPSHOT
: একটি রিলিজ সংস্করণের একটি স্ন্যাপশট সংস্করণ।1.2.3-beta.4
: প্রাক-প্রকাশের সংস্করণটির একটি স্থিতিশীল সংস্করণ।1.2.3
: একটি প্রকাশ সংস্করণ (যা অবশ্যই একটি স্থিতিশীল, স্ন্যাপশট সংস্করণ) isএটি কোনও স্ন্যাপশট একটি সংগ্রহস্থলের জন্য দেখতে কেমন লাগে এবং এই ক্ষেত্রে সক্ষম হয় না, যার অর্থ এখানে উল্লিখিত সংগ্রহস্থল স্থিতিশীল এবং আপডেটের প্রয়োজন নেই।
<project>
...
<repositories>
<repository>
<id>lds-main</id>
<name>LDS Main Repo</name>
<url>http://code.lds.org/nexus/content/groups/main-repo</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
আর একটি কেস হ'ল:
<snapshots>
<enabled>true</enabled>
</snapshots>
যার অর্থ মাভেন এই সংগ্রহস্থলের জন্য আপডেটগুলি সন্ধান করবে। আপনি ট্যাগ সহ আপডেটগুলির জন্য একটি বিরতিও নির্দিষ্ট করতে পারেন।
সাধারণত মেভেনে আমাদের দুই ধরণের বিল্ড থাকে 1) স্ন্যাপশট বিল্ড 2) রিলিজ বিল্ডগুলি
স্ন্যাপশট বিল্ডগুলি: এসএনএপশট হ'ল একটি বিশেষ সংস্করণ যা বর্তমান ডিপ্লোয়মেন্ট কপিটি নিয়মিত সংস্করণের মতো নয় তা নির্দেশ করে, ম্যাভেন দূরবর্তী সংগ্রহস্থলের প্রতিটি বিল্ডের জন্য সংস্করণটি পরীক্ষা করে তাই স্ন্যাপশট বিল্ডগুলি উন্নয়ন বিল্ড ছাড়া কিছুই নয়।
রিলিজ বিল্ডস: রিলিজের অর্থ বিল্ডের সংস্করণে এসএনএপএসএইচটি সরানো, এগুলি নিয়মিত বিল্ড সংস্করণ।
কেবল স্ন্যাপশটের অর্থ এটি স্থিতিশীল নয় এমন সংস্করণ।
সংস্করণে 1.0.0 -SNAPSHOT এর মতো স্ন্যাপশট অন্তর্ভুক্ত করার অর্থ এটি স্থিতিশীল সংস্করণ নয় এবং নির্ভরতা সমাধানের জন্য দূরবর্তী সংগ্রহস্থলের সন্ধান করুন
এসডিএলসির প্রসঙ্গটি বুঝতে স্ন্যাপশট এবং প্রকাশের মধ্যে পার্থক্য বুঝতে সহায়তা করবে। ডেভ প্রক্রিয়া চলাকালীন বিকাশকারীরা সমস্ত তাদের বৈশিষ্ট্যগুলি একটি বেসলাইন শাখায় অবদান রাখেন। কিছু সময় সীসা ভাবেন যে পর্যাপ্ত বৈশিষ্ট্যগুলি জমেছে তখন তিনি বেসলাইন শাখা থেকে একটি রিলিজ শাখা কাটবেন। এই সময় পয়েন্টের আগে যে কোনও বিল্ড হ'ল স্ন্যাপশট। এই পয়েন্টে পোস্ট তৈরি করে রিলিজ। উল্লেখ্য, রিলিজ পরীক্ষার সময় কোনও ত্রুটিযুক্ত স্পট থাকলে প্রযোজনায় যাওয়ার আগে রিলিজ বিল্ডগুলি খুব পরিবর্তন হতে পারে।
স্ন্যাপশটটি কেবল আপনার কনফিগারেশনের উপর নির্ভর করে মাভেন একটি বিশেষ নির্ভরতার উপর সর্বশেষ পরিবর্তনগুলি পরীক্ষা করবে। স্ন্যাপশটটি অস্থির কারণ এটি বিকাশাধীন তবে কোনও বিশেষ প্রকল্পে যদি সর্বশেষ পরিবর্তন করতে হয় তবে আপনাকে অবশ্যই আপনার নির্ভরতা সংস্করণটি স্ন্যাপশটের সংস্করণে কনফিগার করতে হবে। এই দৃশ্যগুলি একাধিক পণ্য সহ বড় সংস্থাগুলিতে ঘটে থাকে যা এই পণ্যগুলি একে অপরের সাথে সম্পর্কিত।
নামটি যেমন বোঝায়, স্ন্যাপশট প্রকল্পের একটি অবস্থা এবং সেই সময়ের সেই মুহূর্তে এর নির্ভরতা বোঝায়। মভেন যখনই প্রকল্পটির একটি নতুন এসএনএপএসএইচটি খুঁজে পান, এটি স্থানীয় সংগ্রহস্থলে প্রকল্পের পুরানো .jar ফাইলটি ডাউনলোড করে প্রতিস্থাপন করে।
স্ন্যাপশট সংস্করণ সক্রিয় বিকাশের অধীনে প্রকল্পগুলির জন্য ব্যবহৃত হয়। যদি আপনার প্রকল্পটি সক্রিয় বিকাশের অধীনে থাকা কোনও সফ্টওয়্যার উপাদানটির উপর নির্ভর করে তবে আপনি একটি স্ন্যাপশট মুক্তির উপর নির্ভর করতে পারেন এবং আপনি যখন কোনও বিল্ড পরিচালনা করেন তখন মাভেন পর্যায়ক্রমে একটি সংগ্রহস্থল থেকে সর্বশেষতম স্ন্যাপশট ডাউনলোড করার চেষ্টা করবেন।