মাশেন প্রকল্প ভার্সন কীভাবে বাশ কমান্ড লাইনে পাবেন


201

পূর্ববর্তী আমি কীভাবে কমান্ড লাইন থেকে মাভেন প্রকল্পের ভেনশনটি পরিবর্তন করতে হবে যা একটি নতুন সমস্যার দিকে নিয়ে যায় সে সম্পর্কে আমি একটি প্রশ্ন জারি করেছি ।

পূর্বে আমি সংস্করণ নম্বর পেতে সক্ষম হয়েছি কারণ সংস্করণটি এমন একটি সম্পত্তি হিসাবে সংরক্ষণ করা হয়েছিল যা কমান্ড লাইন (ব্যাশ) থেকে গ্রেপ করা এবং পার্স করা সহজ was এখন যেহেতু এর জন্য pom.xML উপাদান ব্যবহার করা হয়েছে, সমস্ত নির্ভরতা এবং সম্ভবত কিছু অন্যরাও এটি ব্যবহার করার কারণে এটি আর অনন্য নয়। আমি মনে করি এক্সএমএল বা কিছু খুব প্রসঙ্গ-সচেতন সেড কমান্ড পার্স করার জন্য বাহ্যিক সরঞ্জাম ছাড়া বাশ স্ক্রিপ্টের সাথে বর্তমান সংস্করণ নম্বর পাওয়ার কোনও উপায় নেই ।

আমার মতামতের সবচেয়ে পরিচ্ছন্ন সমাধান হ'ল মাভেনের এই সংস্করণটির তথ্য হস্তান্তর করা। আমি বিভিন্ন বৈশিষ্ট্য পুনরুদ্ধারের জন্য একটি কাস্টম মাভেন প্লাগইন লেখার কথা ভাবছিলাম তবে আমি ভেবেছিলাম আমি এখানে আগে জিজ্ঞাসা করব।

সুতরাং, ${project.version}কমান্ড লাইনের মান পাওয়ার কোনও সহজ উপায় আছে ? আগাম ধন্যবাদ.

সমাধান

সাহায্যের জন্য ধন্যবাদ। আমাকে cdডিরেক্টরিতে নিজেই যেতে হয়েছিল তবে এটি সহজেই করা যায়। আমার বাশ স্ক্রিপ্টে আমার আছে

version=`cd $project_loc && mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'`

যা আমাকে বর্তমান সংস্করণ দেয় যা আমি তারপরে অগ্রসর করতে পারি। গ্রিপিং সহজতর হতে পারে তবে আমি ভেবেছিলাম আমি যতটা সম্ভব শক্তিশালী চাই, তাই আমি প্রথম লাইনে সন্তুষ্ট হয়ে একটি নম্বর দিয়ে শুরু করব এবং এটি সংস্করণ নম্বর হিসাবে পরিচালনা করার চেষ্টা করব।

# Advances the last number of the given version string by one.
function advance_version () {
    local v=$1
    # Get the last number. First remove any suffixes (such as '-SNAPSHOT').
    local cleaned=`echo $v | sed -e 's/[^0-9][^0-9]*$//'`
    local last_num=`echo $cleaned | sed -e 's/[0-9]*\.//g'`
    local next_num=$(($last_num+1))
    # Finally replace the last number in version string with the new one.
    echo $v | sed -e "s/[0-9][0-9]*\([^0-9]*\)$/$next_num/"
}

এবং আমি কেবল কল করে এটি ব্যবহার করি

new_version=$(advance_version $version)

আশা করি এটি কাউকে সাহায্য করবে।


1
সমাধানটি মনে হয় একটি 'মিস করার জন্য সেড এক্সপ্রেশনটি শেষ করতে।
নওরোথ

কোন সেড এক্সপ্রেস? আমি খেয়াল করার মতো মনে হচ্ছে না।
mkko

1
দ্রুত মৃত্যুদণ্ডের জন্য এটি একটি এমভিএন করুন
নাথন

2
আপনি সেই জটিল grep -e '^[[:digit:]]'
সেড

2
আপনি যদি @ নাথন বুবনা দ্বারা প্রস্তাবিত হিসাবে -o ব্যবহার করেন তবে তা 'অফলাইন' মোডে মেভেনটি রাখবে। আপনার যদি ইতিমধ্যে মাভেন সহায়তা প্লাগইন এবং নির্ভরশীল জারগুলি ডাউনলোড না করে থাকে তবে বিল্ডটি ব্যর্থ হবে। কিছুটা হলেও এতে জ্বলতে পেরেছি, আশা করি এটি অন্য কাউকে সাহায্য করবে।
ফিলিপুনিভার্সি

উত্তর:


217

ম্যাভেন সাহায্য প্লাগইন একরকম ইতিমধ্যে এই জন্য কিছু প্রস্তাব করা হয়:

  • help:evaluate ইন্টারেক্টিভ মোডে ব্যবহারকারী দ্বারা প্রদত্ত মাভেন এক্সপ্রেশন মূল্যায়ন করে।

আপনি এটি পেতে কমান্ড লাইনে কীভাবে আবেদন করবেন ${project.version}:

mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate \
    -Dexpression=project.version

8
ঠিক আছে, ধন্যবাদ. আমি মনে করি এটি পরিষ্কার সমাধানের কাছে আমি সবচেয়ে কাছাকাছি। কোনও ধারণা কীভাবে আমি মভেন আউটপুটকে ছাড়িয়ে এই [INFO]বার্তাগুলি ফিল্টার করতে পারি? আমি মাভেনের জন্য একটি স্যুইচ পাইনি। অন্যথায় আমি সংস্করণ নম্বর পার্স করার জন্য কিছু কমান্ড লাইন স্ক্রিপ্টিং যুক্ত করব।
mkko

80
আমি সমস্ত লগিং (আইএনএফও, সতর্কতা, ইত্যাদি) এবং 'ডাউনলোড' বার্তা মুছে ফেলছিmvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version|grep -Ev '(^\[|Download\w+:)'
চাদউইক

13
ম্যাভেন থেকে কম ভার্বোস কিছু আশা করবে না
অ্যান্ডি

24
এখানে একটি পন্থা যে আমি অনুগ্রহ রয়েছে:printf 'VERSION=${project.version}\n0\n' | mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate | grep '^VERSION'
ছাই

40
@ মমানোয়েদ সেরা উত্তরটি পোস্ট করেছেন যা সহজ mvn help:evaluate -Dexpression=project.version -q -DforceStdout। এটি ব্যাশের ব্যবহারে পরিবর্তনশীল হিসাবে ক্যাপচার করতেversion=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
সেবাস্তিয়ান থমসকে

200

টেকের এক্সিকিউটিভ মাভেন প্লাগইনের সাথে সমাধানটি আরও ভাল তবে এটি হওয়া দরকারের চেয়ে আরও জটিল। আমার জন্য এটি এতটা সহজ:

MVN_VERSION=$(mvn -q \
    -Dexec.executable=echo \
    -Dexec.args='${project.version}' \
    --non-recursive \
    exec:exec)

30
আমি মনে করি এটি সবচেয়ে সহজ উপায় যেহেতু এটি গ্রেপ বা অনুরূপ জিনিসগুলি বোঝায় না। mvn -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive exec:exec
তাত্ক্ষণিক

1
আমি গ্রুপআইড, আর্টিফ্যাক্টআইডি এবং সংস্করণ প্রিন্ট করতে চাইলে এই সমাধানটি আমার পক্ষে ভাল কাজ করেছে -Dexec.args='${project.groupId}:${project.artifactId}:${project.version}'
জেমস এইচ।

1
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.2:exec (default-cli) on project audit-events-processor-parent: Command execution failed. Cannot run program "maven" (in directory "/tmp"): error=2, No such file or directory অসহায়তা এখনও অন্য উত্তর আমার জন্য কাজ না করে, ওহ ভাল
cbmanica

আপনাকে ধন্যবাদ আমি এ পর্যন্ত দেখা সবচেয়ে ভাল সমাধান, যেহেতু এর জন্য ভঙ্গুর
গ্রেপ


79

আমি কিছু গবেষণা করেছি এবং নিম্নলিখিতগুলি পেয়েছি:

  1. ম্যাভেনকে দোষ দেওয়া হয়েছে কারণ সিএলআই সরঞ্জাম সম্পর্কিত কিছু ভাল অনুশীলন অনুসরণ করে না বলে এই ডিভোপস সরঞ্জামগুলির সাথে সংহতকরণ সহজ নয়। (রেফ: https://youtu.be/1ILEw6Qca3U?t=372 )

  2. পূর্ববর্তী দৃ on়তার দ্বারা অনুপ্রাণিত হয়ে, আমি মাভেনের উত্স কোডের পাশাপাশি মাভেন-হেল্প-প্লাগইনটিতে একটি নজর দেওয়ার সিদ্ধান্ত নিয়েছি। দেখে মনে হচ্ছে যে তারা সামান্য কিছুটা মেভেন-কিউ সুইচটি স্থির করেছে (আমি সংস্করণটি 3.5.3 ব্যবহার করছি), সুতরাং এখন আপনি যদি এটি পাস করেন তবে আপনি সমস্ত বিরক্তিকর অ-জ্ঞানযুক্ত লগিং স্টাফ পাবেন না যা মেভেনকে ব্যবহার থেকে বিরত রাখে স্বয়ংক্রিয় স্ক্রিপ্টগুলির মধ্যে। সুতরাং আপনার এমন কিছু ব্যবহার করতে সক্ষম হওয়া উচিত:

    mvn help:evaluate -Dexpression=project.version -q

    সমস্যাটি হ'ল এই কমান্ডটি কিছুই প্রিন্ট করে না কারণ ডিফল্টরূপে লগারের সাহায্যে প্লাগইন আউটপুট দেয় যা -কিউ সুইচ দ্বারা নিঃশব্দ হয়ে যায়। (প্লাগইনের সর্বশেষ উপলব্ধ সংস্করণটি জুন, 3 য় 2018 এ প্রকাশিত 3.1.0 রয়েছে)

  3. কার্ল হেইঞ্জ মারবায়েস ( https://github.com/khmarbaise ) একটি fixed চ্ছিক প্যারামিটার যুক্ত করে এটি ঠিক করেছে যা আপনাকে নিম্নলিখিত পদ্ধতিতে কল করতে দেয়:

    mvn help:evaluate -Dexpression=project.version -q -DforceStdout

    কমিটের বিবরণটি এখানে পাওয়া যায়: ( https://github.com/apache/maven-help-plugin/commit/316656983d780c04031bbadd97d4ab245c84d014 )


2
এটি আমার পছন্দসই সমাধান হবে এবং অফিসিয়াল সহায়তা পৃষ্ঠাগুলিতেও এটি উল্লেখ করা হয়েছে । তবে এটি আমার পক্ষে কাজ করে না। আমি ম্যাকোনে আছি ম্যাভেন ভি 3.5.3 এর সাথে। আমি যখন -qস্যুইচটি ব্যবহার করি না তখন এটি সংস্করণটি সঠিকভাবে প্রিন্ট করে (লগ লাইনের মধ্যে)। কোন ধারনা?
অনুগ্রহ করে

3
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি উইন্ডোজ এবং লিনাক্সে কাজ করে (আমি ম্যাক্স ওএসএক্স চেষ্টা করিনি), এবং এটি সহজ। ধন্যবাদ.
ট্র্যাশ 80

1
@montoyaedu সাড়া না দেওয়ার জন্য দুঃখিত। এর মধ্যে আমি 3.5 3.5.৪.৪ তে উন্নীত হয়েছি যা -qস্যুইচটির সাথে কাজ করে ।
10:58

1
@ গুগস আমি নিশ্চিত করতে পারি যে ব্যবহৃত মেভেন সংস্করণ এটি প্রভাবিত করে: ৩.৫.২ (ডিবিয়ান 9-তে প্যাকেজ সংস্করণ) সহ আউটপুট -q -DforceStdoutখালি ছিল, এমনকি প্লাগইন ম্যানেজমেন্টের সাথে প্লাগইনের ৩.১.০ সংস্করণও ব্যবহৃত হয়েছিল তা নিশ্চিত করে); আমি
ম্যাভেনের ৩.৪.৪

3
অবশেষে, 2019 এর জন্য গ্রেপ ছাড়াই একটি ব্যবহারিক সমাধান - (এটি স্বীকৃত উত্তর হওয়া উচিত)। সাথে কাজ করে সি আই বান্ধব সংস্করণ খুব - 3.3.9 উপর পরীক্ষা, 3.5.3, 3.5.4, 3.6.0
এড রান্ডাল

47
mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v '\['

2
দ্রুত প্রয়োগের জন্য সেই এমভিএন -ও করুন
নাথন

1
আমার উত্তর (কুইকশিফ্টিন) দেখুন যার নীচে ফিল্টারগুলি 'ডাউনলোড:' লাইনও রয়েছে।
কুইকশিফ্টিন

10
আপনি যদি @ নাথন বুবনা দ্বারা প্রস্তাবিত হিসাবে -o ব্যবহার করেন তবে তা 'অফলাইন' মোডে মেভেনটি রাখবে। আপনার যদি ইতিমধ্যে মাভেন সহায়তা প্লাগইন এবং নির্ভরশীল জারগুলি ডাউনলোড না করে থাকে তবে বিল্ডটি ব্যর্থ হবে। কিছুটা হলেও এতে জ্বলতে পেরেছি, আশা করি এটি অন্য কাউকে সাহায্য করবে।
ফিলিপুনিভার্সি

2> /dev/nullঅন্যথায় আপনি যেভাবে পেতে পারেন তা যোগ করতেও পারেনPicked up _JAVA_OPTIONS:
জাকুব বোচেনস্কি

2
উইন্ডোজে, কমান্ডের শেষেটি এর সাথে প্রতিস্থাপন করুন | findstr /v "["
টুনাকি

39

শীর্ষের উত্তরটি আমার মতে বেশ জঞ্জাল, আপনাকে মাভেন কনসোল আউটপুট হ্যাক করার জন্য একগুচ্ছ গ্রেপ ব্যবহার করতে হবে। কাজের জন্য সঠিক সরঞ্জামটি ব্যবহার করবেন না কেন? এক্সপথ সিনট্যাক্স ব্যবহার করা সংস্করণ নম্বরটি পুনরুদ্ধারের জন্য সর্বোত্তম পন্থা, যেহেতু এটি কোনও এক্সএমএল ডেটা স্ট্রাকচার অ্যাক্সেস করার উদ্দেশ্য পদ্ধতি। নীচের অভিব্যক্তিটি উপাদানগুলির "স্থানীয় নাম" ব্যবহার করে পমকে অনুসরণ করছে, অন্য কথায় নেমস্পেসের ঘোষণাকে উপেক্ষা করে যা এক্সএমএলে উপস্থিত থাকতে পারে বা নাও থাকতে পারে।

xmllint --xpath "//*[local-name()='project']/*[local-name()='version']/text()" pom.xml

@ ববমার্কি আমি দ্বিতীয় যে; মাভেন ব্যবহার করা এবং রিজেক্সের সাহায্যে আউটপুট স্ক্রাব করা বেদনাদায়ক।
mhvelplund

3
এমন একটি প্রকল্প যা পিতামাত্রে পম থেকে উত্তরাধিকার সূত্রে প্রাপ্ত about
ওয়েজ

2
"কেন কাজের জন্য সঠিক সরঞ্জামটি ব্যবহার করবেন না?" আইই! ম্যাভেন?
jeremyjjbrown

আমি বুঝতে পারি যে ব্যবহার mvnকরা সঠিক পন্থা এবং execপ্লাগইনটি আসলে দুর্দান্তভাবে কাজ করে তবে সমস্ত এমভিএন সমাধানগুলি সমাধান করতে হবে এবং আমি একটি বিল্ড পাইপলাইন বুটস্ট্র্যাপ করার চেষ্টা করছি যেখানে নির্ভরতা রেজোলিউশন কাজ করবে না, তাই আমি execএই সমাধানটির সাথে পদ্ধতির প্রতিস্থাপন করতে যাচ্ছি । ভাগ্যক্রমে, আমাকে পিতামাতার উত্তরাধিকার সূত্রে প্রাপ্ত সংস্করণগুলি নিয়ে চিন্তা করতে হবে না।
হরিদসভ

এটি সিআই-বান্ধব সংস্করণে কাজ করবে না, যেখানে সংস্করণ ${revision}উদাহরণ হিসাবে যেমন সম্পত্তি property সূত্র। maven.apache.org/maven-ci-friendly.html
এড র্যান্ডাল

30

এটি আউটপুট থেকে লগ এন্ট্রি গ্রেপিংয়ের প্রয়োজনীয়তা এড়াবে:

mvn -Dexec.executable='echo' -Dexec.args='${project.version}' --non-recursive exec:exec -q

যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কেন এবং / অথবা এটি কীভাবে প্রশ্নের উত্তর দেয় সে সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করে এর দীর্ঘমেয়াদী মানকে উল্লেখযোগ্যভাবে উন্নতি করবে। কিছু ব্যাখ্যা যুক্ত করতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন।
টবি স্পিড

1
আমি মনে করি এই পদ্ধতির জন্য mvn এর পরে "-Q" লাগানো দরকার।
Rudge

এটি গৃহীত সমাধানের চেয়ে ভাল; ম্যাভেন শোরগোল আউটপুট ফিল্টার করার দরকার নেই।
উইলিয়ান মিতসুদা

19

এটি আমি খুঁজে পাওয়া সবচেয়ে পরিষ্কার সমাধান :

mvn org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=project.version -q -DforceStdout

সুবিধাদি:

  • এটি সমস্ত অপারেটিং সিস্টেম এবং সমস্ত শেলগুলিতে সূক্ষ্মভাবে কাজ করে ।
  • কোনও বাহ্যিক সরঞ্জামের প্রয়োজন নেই!

বিঃদ্রঃ:

  • maven-help-pluginসংস্করণ 3.2.0(এবং উপরে) forceStdoutবিকল্প আছে। আপনি 3.2.0যদি উপরের কমান্ডে শিল্পী থেকে mvn-help- প্লাগইনের উপলব্ধ সংস্করণগুলির তালিকা থেকে একটি নতুন সংস্করণ দিয়ে প্রতিস্থাপন করতে পারেন , যদি পাওয়া যায়।
  • বিকল্পটি -qভার্বোজ বার্তা ( ইত্যাদি) দমন করে [INFO],[WARN]

আপনি যদি আনতে চান groupIdএবং artifactIdপাশাপাশি, এই উত্তরটি দেখুন


13
python -c "import xml.etree.ElementTree as ET; \
  print(ET.parse(open('pom.xml')).getroot().find( \
  '{http://maven.apache.org/POM/4.0.0}version').text)"

যতক্ষণ আপনার অজগর 2.5 বা তার বেশি হয়, এটি কাজ করা উচিত। যদি এর চেয়ে কম সংস্করণ থাকে তবে ইনস্টল করুন python-lxmlএবং আমদানিটিকে lxML.etree এ পরিবর্তন করুন। এই পদ্ধতিটি দ্রুত এবং কোনও অতিরিক্ত প্লাগইন ডাউনলোড করার প্রয়োজন নেই। এটি এমন ত্রুটিযুক্ত pom.xML ফাইলগুলিতেও কাজ করে যা xmllint এর সাথে যাচাই করে না, যেমনগুলির যেগুলি পার্স করা দরকার। ম্যাক এবং লিনাক্সে পরীক্ষিত।


12

আমি এখানে অন্যান্য উত্তরগুলির কিছু ব্যবহার করার সময় পাশের কেসগুলিতে চালিয়ে যাচ্ছি, সুতরাং এখানে আরও একটি বিকল্প রয়েছে।

version=$(printf 'VER\t${project.version}' | mvn help:evaluate | grep '^VER' | cut -f2)

1
printf 'VER\t${project.version}' | mvn help:evaluate 2> /dev/null | grep '^VER' | cut -f2
ইয়েজেনি

7

যদি আপনি কোনও অস্থায়ী ফাইলে সংস্করণটি লিখতে আপত্তি করেন না, তবে আরও একটি সমাধান রয়েছে (গ্রেপ / সেড ছাড়াই) যা আমার পক্ষে ভাল কাজ করে। ( সম্পাদনা : কোনও অস্থায়ী ফাইল ঝামেলা ছাড়াই সহজ সরল সমাধানের জন্য rjrjr এর উত্তর দেখুন )

বাইনারি সহ আমি এক্সেক মাভেন প্লাগিন ব্যবহার করি echo। ম্যাভেন হেল্প প্লাগিনের বিপরীতে, এক্সেক প্লাগইন একটি ফাইলে আউটপুট পুনর্নির্দেশকে মঞ্জুরি দেয় যা গ্রেপ / সেডকে বাইপাস করতে ব্যবহার করা যায় এবং মাল্টলাইন সংস্করণ স্ট্রিংয়ের মতো অদ্ভুত জিনিসগুলি পার্স করাও সম্ভব করে তোলে (সংস্করণ ট্যাগে সিডিএটিএ ব্লক সহ), কমপক্ষে একটি নির্দিষ্ট পরিমাণে।

#!/usr/bin/env sh

MVN_VERSION=""
VERSION_FILE=$( mktemp mvn_project_version_XXXXX )
trap "rm -f -- \"$VERSION_FILE\"" INT EXIT

mvn -Dexec.executable="echo" \
    -Dexec.args='${project.version}' \
    -Dexec.outputFile="$VERSION_FILE" \
    --non-recursive \
    --batch-mode \
    org.codehaus.mojo:exec-maven-plugin:1.3.1:exec > /dev/null 2>&1 ||
    { echo "Maven invocation failed!" 1>&2; exit 1; }

# if you just care about the first line of the version, which will be
# sufficent for pretty much every use case I can imagine, you can use
# the read builtin
[ -s "$VERSION_FILE" ] && read -r MVN_VERSION < "$VERSION_FILE"

# Otherwise, you could use cat.
# Note that this still has issues when there are leading whitespaces
# in the multiline version string
#MVN_VERSION=$( cat "$VERSION_FILE" )

printf "Maven project version: %s\n" "$MVN_VERSION"

6
এটি সহায়ক প্লাগইনের তুলনায় অনেক ভাল সমাধান এবং আপনার আই / ও-র সমস্ত প্রয়োজন নেই। কেবল একটি-কিউ পতাকা যুক্ত করুন এবং একমাত্র আউটপুটটি সংস্করণ হবে। তাই: mvn -q -Dexec.executable = "একো" -Dexec.args = '$ {project.version}' --non-রিকার্সিভ org.codehaus.mojo: Exec-ম্যাভেন-প্লাগইন: 1.3.1: Exec
rjrjr

rjrjr: দুর্দান্ত! এখানে কেবলমাত্র আমার এখানে উল্লেখ করা দরকার ত্রুটি পরিচালনা করা: এমভিএন ব্যর্থ হলে আপনি একটি অবৈধ সংস্করণ স্ট্রিং পাবেন। সুতরাং কিছু বৈধতা প্রয়োজন যেমন এমভিএন রিটার্ন কোড পরীক্ষা করা বা স্ট্রিং নিজেই।
টম

6

কেবল রেকর্ডের জন্য, মাউভেনের সিম্পল এসএলএফ 4 জে লগিংটি সরাসরি কমান্ড লাইনে কনফিগার করা সম্ভব যা কেবল আমাদের কনফিগার করে প্রয়োজনীয় ফলাফল:

  • org.slf4j.simpleLogger.defaultLogLevel=WARN এবং
  • org.slf4j.simpleLogger.log.org.apache.maven.plugins.help=INFO

http://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html এ নথিভুক্ত হিসাবে

MAVEN_OPTS="\
-Dorg.slf4j.simpleLogger.defaultLogLevel=WARN \
-Dorg.slf4j.simpleLogger.log.org.apache.maven.plugins.help=INFO" \
mvn help:evaluate -o -Dexpression=project.version

ফলস্বরূপ, সহজেই চালানো যায় tail -1এবং পান:

$ MAVEN_OPTS="\
-Dorg.slf4j.simpleLogger.defaultLogLevel=WARN \
-Dorg.slf4j.simpleLogger.log.org.apache.maven.plugins.help=INFO" \
mvn help:evaluate -o -Dexpression=project.version | tail -1

1.0.0-SNAPSHOT

মনে রাখবেন এটি একটি ওয়ান-লাইনার। MAVEN_OPTSকেবলমাত্র এই নির্দিষ্ট mvnমৃত্যুদন্ডের জন্যই পুনর্লিখন করা হচ্ছে ।


5

আমি লক্ষ্য করেছি Downloaded:আউটপুটে কিছু উদ্দীপক লাইন আসছে যা আমার আসল অ্যাসাইনমেন্টটি ভঙ্গ করছে। আমি যে ফিল্টারটি স্থির করেছি তা এখানে; আশা করি এটা সাহায্য করবে!

version=$(mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | egrep -v '^\[|Downloading:' | tr -d ' \n')

সম্পাদনা

না 100% নিশ্চিত কেন, কিন্তু জেনকিন্স একটি পোস্ট বিল্ড স্ক্রিপ্ট মাধ্যমে এই চলমান, আউটপুট হিসেবে আসছেন [INFO]version, যেমন[INFO]0.3.2

আমি আউটপুটটিকে একটি ফাইলে ফেলে দিয়েছিলাম এবং সরাসরি এটি আমার প্রথম ফিল্টারটি বাস থেকে সরাসরি চালিত করেছিলাম, এটি দুর্দান্ত কাজ করে .., তাই আবার জেনকিন্স জমিতে কী চলছে তা নিশ্চিত হওয়া যায় না।

এটি জেনকিনসে 100% পেতে, আমি একটি ফলো-আপ sedফিল্টার যুক্ত করেছি ; এখানে আমার সর্বশেষ

version=$(mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | egrep -v '^\[|Downloading:' | tr -d ' \n' | sed -E 's/\[.*\]//g')

সম্পাদনা

একটা শেষ নোট এখানে .. আমি খুঁজে পাওয়া যায় নি trহয়েছিল এখনও ভালো জিনিস ফলে /r/n0.3.2(আবার শুধুমাত্র যখন জেনকিন্স মাধ্যমে চলমান)। স্যুইচ করা হয়েছে awkএবং সমস্যাটি চলে গেছে! আমার চূড়ান্ত কাজের ফলাফল

mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version \
| egrep -v '^\[|Downloading:' | sed 's/[^0-9\.]//g' | awk 1 ORS=''

5

একটি সহজ maven একমাত্র সমাধান

mvn -q -N org.codehaus.mojo:exec-maven-plugin:1.3.1:exec \
    -Dexec.executable='echo' \
    -Dexec.args='${project.version}'

এবং বোনাস পয়েন্টগুলির জন্য একটি সংস্করণের পার্সড অংশ

mvn -q -N org.codehaus.mojo:build-helper-maven-plugin:3.0.0:parse-version \
    org.codehaus.mojo:exec-maven-plugin:1.3.1:exec \
    -Dexec.executable='echo' \
    -Dexec.args='${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}'

5

আমি সম্প্রতি মুক্তিপ্রাপ্ত প্রার্থী মাভেন প্লাগইন তৈরি করেছি যা এই সঠিক সমস্যাটি সমাধান করে যাতে আপনাকে কোনও হ্যাকি শেল স্ক্রিপ্টগুলির অবলম্বন করতে এবং আউটপুটটি বিশ্লেষণ করতে না হয়maven-help-plugin

উদাহরণস্বরূপ, আপনার মেভেন প্রকল্পের সংস্করণটি টার্মিনালে মুদ্রণ করতে চালান:

mvn com.smartcodeltd:release-candidate-maven-plugin:LATEST:version

যা আউটপুট অনুরূপ দেয় maven-help-plugin:

[INFO] Detected version: '1.0.0-SNAPSHOT'
1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

তবে, আপনি একটি স্বেচ্ছাসেবী আউটপুট ফর্ম্যাটও নির্দিষ্ট করতে পারেন (যাতে সিআই সার্ভার যেমন টিমসিটির মাধ্যমে লগ থেকে সংস্করণটি নেওয়া যায় ):

mvn com.smartcodeltd:release-candidate-maven-plugin:LATEST:version \
   -DoutputTemplate="##teamcity[setParameter name='env.PROJECT_VERSION' value='{{ version }}']"

যার ফলাফল:

[INFO] Detected version: '1.0.0-SNAPSHOT'
##teamcity[setParameter name='env.PROJECT_VERSION' value='1.0.0-SNAPSHOT']
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

একটি ফাইল (তাই এর মত সি আই সার্ভার যা আউটপুট সংরক্ষণ করতে জেনকিন্স পারে এটি ব্যবহার ):

mvn com.smartcodeltd:release-candidate-maven-plugin:LATEST:version \
   -DoutputTemplate="PROJECT_VERSION={{ version }}" \
   -DoutputUri="file://\${project.basedir}/version.properties"

ফলাফল version.propertiesহিসাবে ফাইলটি নীচে দেখতে পাবেন:

PROJECT_VERSION=1.0.0-SNAPSHOT

উপরোক্ত সমস্তগুলির উপরে, রিলিজ প্রার্থী আপনাকে আপনার পিওএম এ সংজ্ঞায়িত করা এপিআই সংস্করণের উপর ভিত্তি করে আপনার প্রকল্পের সংস্করণ (যা সম্ভবত আপনি আপনার সিআই সার্ভারে কিছু করতে চান) সেট করার অনুমতি দেয় ।

আপনি যদি ম্যাভেন লাইফসাইকের অংশ হিসাবে প্রকাশিত প্রার্থীর উদাহরণ দেখতে চান তবে pom.xmlআমার অন্যান্য ওপেন সোর্স প্রকল্প - জেনকিন্সের জন্য বিল্ড মনিটরের একটি চেহারা দেখুন ।


5

প্রয়োজন ছাড়া মাভেনের একটি বিকল্প রয়েছে:

grep -oPm1 "(?<=<version>)[^<]+" "pom.xml"

এটি পম মধ্যে প্রথম ঘটনাটি দেখায়। আমার ক্ষেত্রে প্রথম ঘটনাটি প্যারেন্ট পম সংস্করণ দেয়। তবে সত্যি কথা বলতে আমি উত্তরটি খুঁজছিলাম। এটি পূর্বে উল্লিখিত সমাধানগুলির তুলনায় অনেক দ্রুত এবং যথাযথ ঘটনাটি পেতে এটি পরিবর্তন করা সহজ। দ্বিতীয় ঘটনাটি ব্যবহারের জন্য: grep -oPm2 "(?<=<version>)[^<]+" pom.xml | sed -n 2pতৃতীয় ঘটনাটি ব্যবহারের জন্য: grep -oPm3 "(?<=<version>)[^<]+" pom.xml | sed -n 3pএবং
তেমন

আপনি ধরে নিচ্ছেন সংস্করণ উপাদানটি প্রথম ঘটনা, এবং অনুমানটি অবৈধ হলে এটি কার্যকর হয় না।
ডেভিলডেটা

3

অল-ইন-ওয়ান সমাধানটি সহজেই বোঝা যায় যা মভেন প্রকল্পের সংস্করণকে ছাড়িয়ে যায় [INFO]এবং বহিরাগত আউটপুট এবং Downloadবার্তাগুলিকে দমন করে:

mvn -o org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v '\['

একই জিনিস, তবে দুটি লাইনে বিভক্ত:

mvn -o org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate \
      -Dexpression=project.version | grep -v '\['

আউটপুট: 4.3-SNAPSHOT

সুতরাং, আপনার project.versionএকটি সাধারণ বাশ স্ক্রিপ্টে ব্যবহার করে :

projectVersion=`mvn -o org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v '\['`
cd "target/"$projectVersion"-build"

এই পৃষ্ঠার অন্যান্য সমাধানগুলি সমস্ত কৌশলকে এক সাথে একত্রিত করে বলে মনে হচ্ছে না।



3

এটি এখন পর্যন্ত সবচেয়ে সহজ বাশ কাটা এবং পেস্ট সমাধান:

VERSION=$(mvn -Dexec.executable='echo' -Dexec.args='${project.version}' --non-recursive exec:exec -q)
echo $VERSION

এটি প্রতিধ্বনিত হয়

1.4

2

আমি আমার জন্য সঠিক ভারসাম্য খুঁজে পেয়েছি। mvn packageম্যাভেন-আরচিভার প্লাগইন এর পরে target/maven-archiver/pom.propertiesএই জাতীয় সামগ্রী তৈরি করে

version=0.0.1-SNAPSHOT
groupId=somegroup
artifactId=someArtifact

এবং আমি এটি কার্যকর করার জন্য ব্যাশ ব্যবহার করছি

. ./target/maven-archiver/pom.properties

তারপর

echo $version
0.0.1-SNAPSHOT

এই ফাইলটি কার্যকর করতে এটি মোটেও নিরাপদ নয়, তবে সেই ফাইল থেকে পরিবেশ পরিবর্তনশীল পড়তে এবং সেট করতে এক্সিকিউশনটি সহজেই পার্ল বা ব্যাশ স্ক্রিপ্টে রূপান্তরিত হতে পারে।


1

এটি আমার জন্য, অফলাইন এবং এমভিএন এর উপর নির্ভর করে কাজ করেছে:

VERSION=$(grep --max-count=1 '<version>' <your_path>/pom.xml | awk -F '>' '{ print $2 }' | awk -F '<' '{ print $1 }')
echo $VERSION

1

এক্সিকিউশন প্লাগইন কোনও আউটপুট পার্সিং ছাড়াই কাজ করে কারণ আউটপুটটিকে ফাইলের মধ্যে পুনঃনির্দেশিত করা যায় এবং EnvInject প্লাগইনটির মাধ্যমে কাজের পরিবেশে ফিরে ইনজেকশন দেওয়া যায়:

এখানে চিত্র বর্ণনা লিখুন


1

প্রশ্নের ভিত্তিতে, আমি সমস্ত লিখিত পিতামাতা / সাবমডিউলগুলিতে আমার সংস্করণ নম্বরটি স্বয়ংক্রিয়ভাবে বাড়ানোর জন্য নীচে এই স্ক্রিপ্টটি ব্যবহার করি:

#!/usr/bin/env bash  

# Advances the last number of the given version string by one.  
function advance\_version () {  
    local v=$1  
    \# Get the last number. First remove any suffixes (such as '-SNAPSHOT').  
  local cleaned=\`echo $v | sed \-e 's/\[^0-9\]\[^0-9\]\*$//'\`  
 local last\_num=\`echo $cleaned | sed \-e 's/\[0-9\]\*\\.//g'\`  
 local next\_num=$(($last\_num+1))  
  \# Finally replace the last number in version string with the new one.  
  echo $v | sed \-e "s/\[0-9\]\[0-9\]\*\\(\[^0-9\]\*\\)$/$next\_num/"  
}  

version=$(mvn org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=project.version -q -DforceStdout)  

new\_version=$(advance\_version $version)  

mvn versions:set -DnewVersion=${new\_version} -DprocessAllModules -DgenerateBackupPoms=false

0

হয় আপনি mvnউত্তর দিয়েছেন (বেশিরভাগ উত্তর হিসাবে বোঝায়), অথবা আপনি উত্তরটি থেকে বের করে নিন pom.xml। দ্বিতীয় পদ্ধতির একমাত্র ব্যর্থতা হ'ল আপনি খুব সহজেই <version/>ট্যাগটির মান বের করতে পারবেন তবে এটি কেবল তখনই অর্থবহ হবে যদি এটি আক্ষরিক হয়, এটি কোনও ম্যাভেন সম্পত্তি নয়। আমি যাই হোক না কেন এই পদ্ধতির চয়ন করেছি:

  • mvn ভার্বোজের উপায় এবং আমি কেবল এর আউটপুট ফিল্টার করতে পছন্দ করি না।
  • mvnপড়ার তুলনায় শুরু খুব ধীরpom.xml
  • আমি সর্বদা আক্ষরিক মান ব্যবহার করি <version/>

mvn-versionহ'ল একটি zshশেল স্ক্রিপ্ট যা প্রজেক্টের সংস্করণটি xmlstarletপড়তে pom.xmlএবং মুদ্রণ করতে ব্যবহার করে (যদি এটি উপস্থিত থাকে) বা পিতামাতার প্রকল্পের সংস্করণ (এটি উপস্থিত থাকলে):

$ mvn-version .
1.0.0-SNAPSHOT

সুবিধাটি হ'ল এটি চলার চেয়ে দ্রুততর উপায়mvn :

$ time mvn-version .
1.1.0-SNAPSHOT
mvn-version .  0.01s user 0.01s system 75% cpu 0.019 total

$ time mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate \
> -Dexpression=project.version
mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate   4.17s user 0.21s system 240% cpu 1.823 total

আমার মেশিনে পার্থক্য দুটি মাত্রার মানের চেয়ে বেশি।


0

আমার ট্র্যাভিস কাজের সময় আমার ঠিক এই প্রয়োজনটি প্রয়োজন তবে একাধিক মান সহ। আমি এই সমাধানটি দিয়ে শুরু করি তবে একাধিকবার কল করার সময় এটি খুব ধীর হয় (আমার 5 টি এক্সপ্রেস প্রয়োজন)।

আমি পোম.এক্সএমএল এর মানগুলি .sh ফাইলে বের করার জন্য একটি সাধারণ মাভেন প্লাগইন লিখেছি।

https://github.com/famaridon/ci-tools-maven-plugin

mvn com.famaridon:ci-tools-maven-plugin:0.0.1-SNAPSHOT:environment -Dexpressions=project.artifactId,project.version,project.groupId,project.build.sourceEncoding

যে উত্পাদন করবে:

#!/usr/bin/env bash
CI_TOOLS_PROJECT_ARTIFACTID='ci-tools-maven-plugin';
CI_TOOLS_PROJECT_VERSION='0.0.1-SNAPSHOT';
CI_TOOLS_PROJECT_GROUPID='com.famaridon';
CI_TOOLS_PROJECT_BUILD_SOURCEENCODING='UTF-8';

এখন আপনি কেবল ফাইলটি উত্স করতে পারেন

source .target/ci-tools-env.sh

আনন্দ কর.


-1

আমি আমার ইউনিক্স শেলটিতে ওয়ান-লাইনার ব্যবহার করছি ...

বিড়াল pom.xML | গ্রেপ "" | মাথা -n 1 | sed -e "s / version // g" | sed -e "s / \ s * [<> /] * // জি"

আপনি এই লাইনটি শেল স্ক্রিপ্টে বা একটি উপাধ হিসাবে লুকিয়ে রাখতে পারেন।


-1

এটি উপর থেকে একটি সম্পাদনা

বিড়াল pom.xML | গ্রেপ "" | মাথা -n 1 | sed -e "s / version // g" | sed -e "s / \ s * [<> /] * // জি"

আমি এটি পরীক্ষা করেছিলাম cmdline ভাল কাজ করে

গ্রেপ "" pom.xML | মাথা -n 1 | sed -e "s / version // g" | sed -e "s / \ s * [<> /] * // জি"

একই অন্য সংস্করণ। আমার এমপিএন ইনস্টল না করে কেইনএসে জেনকিনস সিআই-এর সংস্করণ নম্বরটি পাওয়া দরকার তাই এটি সবচেয়ে সহায়ক is

সবাইকে ধন্যবাদ.


-2
mvn help:evaluate -Dexpression=project.version | sed -e 1h -e '2,3{H;g}' -e '/\[INFO\] BUILD SUCCESS/ q' -e '1,2d' -e '{N;D}' | sed -e '1q'

আমি খালি আউটপুট থেকে sedনিষ্কাশন করতে সম্প্রতি আমি প্রয়োগ করেছি ছোট ফিল্টার উন্নতি project.version


-2
VERSION=$(head -50 pom.xml | awk -F'>' '/SNAPSHOT/ {print $2}' | awk -F'<' '{print $1}')

আমি এটিই ভার্সন নম্বরটি পেয়েছি, ভেবেছিলাম এটি করার আরও ভাল কোনও উপায় ছিল না way

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.