অ্যাক্টিভ বাইডায়াল্ট সক্রিয় ম্যাভেন প্রোফাইলগুলি কীভাবে রাখবেন এমনকি অন্য প্রোফাইল সক্রিয় হয়ে যায়?


113

আমার pom.xML এ আমার একটি প্রোফাইল রয়েছে যা স্পষ্টতই নিষ্ক্রিয় করা না থাকলে (-P! ফার্স্ট প্রোফাইলে) সর্বদা সক্রিয় থাকা উচিত। অ্যাক্টিভ বাইডাইফ্ট পতাকা ব্যবহার করে এটি সমাধান করেছি:

<profiles>
  <profile>
    <id>firstProfile</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    ...
  </profile>
</profiles>

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

... পূর্বের বর্ণিত পদ্ধতিগুলির মধ্যে একটি ব্যবহার করে একই পিওমে অন্য প্রোফাইল সক্রিয় না করা হলে এই প্রোফাইলটি সমস্ত বিল্ডের জন্য স্বয়ংক্রিয়ভাবে সক্রিয় থাকবে। ডিফল্টরূপে সক্রিয় সমস্ত প্রোফাইলগুলি কমান্ড লাইনে বা এর অ্যাক্টিভেশন কনফিগারেশনের মাধ্যমে যখন POM এ কোনও প্রোফাইল সক্রিয় হয় তখন স্বয়ংক্রিয়ভাবে নিষ্ক্রিয় হয়ে যায়। ...

কীভাবে কোনও সম্ভাবনা রয়েছে কীভাবে প্রথম প্রোফাইলে সর্বদা সক্রিয় রাখতে হবে (সেটিংস.এক্সএমএল এ ঘোষণা না করে)?


উত্তর:


153

একটি কৌশল হ'ল এড়ানো activeByDefault, এবং পরিবর্তে কোনও সম্পত্তির অভাবে প্রোফাইল সক্রিয় করা, যেমন:

<profiles>
  <profile>
    <id>firstProfile</id>
    <activation>
      <property>
        <name>!skipFirstProfile</name>
      </property>
    </activation>
    ...
  </profile>
</profiles>

এরপরে আপনি প্রোফাইলটি সাথে -DskipFirstProfile বা সাথে নিষ্ক্রিয় করতে সক্ষম হবেন -P !firstProfileতবে অন্যথায় প্রোফাইল সক্রিয় থাকবে।

দেখুন: মাভেন: সম্পূর্ণ রেফারেন্স, প্রোফাইল অ্যাক্টিভেশন - কোনও সম্পত্তির অনুপস্থিতি দ্বারা সক্রিয়করণ


কোন পরিস্থিতিতে স্পষ্টভাবে নিজের নিজের প্রোফাইল উল্লেখের চেয়ে এটি সহায়ক বা ভাল? অর্থাত্ -DmyFlag এ পাস করার পরিবর্তে আমি -PmyDefaultProfile করতে পারি? আমি যে পতাকাটি মিস করছি তার সাথে এটি নিয়ন্ত্রণ করার কোনও সুবিধা আছে কি?
চেতিয়া

1
কারণ প্রোফাইল সক্রিয় আছে স্বয়ংক্রিয়ভাবে পতাকা না আছে। প্রোফাইলটি firstProfileকেবলমাত্র অক্ষম করা থাকলে -DskipFirstProfile(যেমন mvn verify -DskipFirstProfile)।
seanf

25

আমি আশা করি এরকম কোনও সম্ভাবনা থাকলে আমি প্রায়ই এটি মিস করেছি। একমাত্র প্রাসঙ্গিক জিরার ইস্যুটি আমি খুঁজে পেতে পারি এটি হ'ল:

MNG-4917: প্রোফাইলটি সক্রিয় নেই যদিও এটিতে অ্যাক্টিভ বাইডায়াল্ট সত্য হিসাবে সেট করা রয়েছে

এবং এটি হিসাবে সমাধান করা হয়েছে Not A Problem

আমি ব্যবহার বন্ধ করে দিয়েছি activeByDefault, কারণ এই "সমস্ত বা কিছুই" পদ্ধতির বিষয়টি আমার পক্ষে অকেজো হয়ে গেছে।


এই আচরণটি পরিবর্তনের একমাত্র উপায় হ'ল DefaultProfileSelectorএটির জন্য আপনার নিজের প্রতিস্থাপনটি লিখুন , এটির সাথে একটি প্লেক্সাস উপাদান হিসাবে নিবন্ধন করুন @Component( role = ProfileSelector.class )এবং এটিতে প্রবেশ করুন ${MAVEN_HOME}/lib/ext(এইভাবে এটি ডিফল্ট প্রোফাইল নির্বাচক হিসাবে বেছে নেওয়া হবে)। (আপনি যদি ম্যাভেন 3.0.০.২ বা তার বেশি বয়সী ব্যবহার করছেন তবে এটি ${MAVEN_HOME}/bin/m2.confলোড lib/extহওয়ার আগে আপনাকে লোড করতেও সম্পাদনা করতে হবে lib)


বেস-কনফিগারেশনগুলিকে পুনরায় ব্যবহারের অনুমতি দেয়, বিকল্পের সুন্দর-হ'ল প্রোফাইল-ইনরিয়েন্স বা প্রোফাইল-সজ্জাকারী হবে।
মুকুট

@ ক্রাউন অবশ্যই, হ্যাঁ বৈশিষ্ট্যটির অনুরোধ হিসাবে কেন এটি সুপারিশ করবেন না?
সান প্যাট্রিক ফ্লয়েড

এটি সম্পর্কিত এক প্রকারের ... একটি জিনিস আমি এটি করতে চাই এটি ডিফল্ট প্রোফাইল দ্বারা সক্রিয় করে সমস্ত মডিউল যুক্ত করতে পারে কারণ আমি ভেবেছিলাম কার্য সম্পাদন থেকে কোনও মডিউল সরানোর কোনও উপায় নেই। 3.2.1 এ তারা এখানে দেখানো হিসাবে এটি যোগ করেছেন । কেউ যদি এখানে হোঁচট খায় এবং আমার সাথে একই কারণে মডিউল ব্যবহার করছে সে ক্ষেত্রে আমি এই মন্তব্যটি করছি leaving
ক্যাপ্টেন ম্যান

10

এই প্রশ্নটি প্রাচীন, তবে এটির activeProfileপরিবর্তে ব্যবহার করে সমস্যাটি সমাধানযোগ্য vactiveByDefault । আমি ম্যাভেন ৩.৩.৯ এ আছি তবে সমাধানটি পূর্ববর্তী সংস্করণগুলিতে কাজ করতে পারে।

আপনার নিজের activeProfilesমধ্যে কেবল তালিকাবদ্ধ করুন settings.xml:

<settings>
  <profiles>
    [...]
  </profiles>
  <activeProfiles>
    <activeProfile>my-awesome-profile</activeProfile>
  </activeProfiles>
</settings>

ইন my-awesome-profileতাই তারা তাই ডাটাবেসের URL গুলি মতো সেটিংস আছে এবং সবসময় প্রযোজ্য। এখানে, আমি একটি দ্বিতীয় প্রোফাইল সক্রিয় করি resolve-from-central:

$ mvn help:all-profiles -P resolve-from-central 
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-help-plugin:2.2:all-profiles (default-cli) @ standalone-pom ---
[INFO] Listing Profiles for Project: org.apache.maven:standalone-pom:pom:1
  Profile Id: resolve-from-central (Active: true , Source: settings.xml)
  Profile Id: my-awesome-profile (Active: true , Source: settings.xml)
  Profile Id: resolve-from-internal (Active: false , Source: settings.xml)

কীভাবে my-awesome-profileএখনও সক্রিয় তা লক্ষ্য করুন । হ্যাঁ!


4

আপনি কেবল কমান্ড লাইনে সক্রিয় হওয়া সমস্ত প্রোফাইলগুলি তালিকাভুক্ত করতে পারেন:

-পি প্রোফাইল -১, প্রোফাইল -২

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


7
এটি সম্পূর্ণ সত্য নয়। -Pশুধুমাত্র নিষ্ক্রিয় <activeByDefault>প্রোফাইলগুলি সহ ম্যানুয়ালি প্রোফাইলগুলি সক্রিয় করা। দ্বারা সক্রিয় প্রোফাইল <activeProfiles>মধ্যে settings.xmlবা অন্য কোনো ধরনের দ্বারা <activation>সক্রিয় থাকার যদি না স্পষ্টভাবে নিষ্ক্রিয়।
স্যাম হেনেস

4

প্রোফাইলগুলি POM এ কিছু অর্ডার আনার একটি ভাল উপায়। বিশেষত যদি আপনি একই উদ্দেশ্যে বিভিন্ন প্লাগইনের একাধিক মৃত্যুদণ্ড ব্যবহার করেন।

ফাইলগুলি ব্যবহার করে:

<profile>
    <id>alwaysActive</id>
    <activation>
         <file><exists>.</exists></file>
    </activation>
    ...
</profile>

এটি সর্বদা সত্য হবে (যদি না কেউ মাভেন বুটের সময় ডিরেক্টরিটি মুছে দেয় :) :) ম্যাভেন 3.6.0 এর সাথে পরীক্ষিত।

প্রকল্পের ধরণের মধ্যে পার্থক্য করার জন্য এটি একটি ভাল উপায়ও হতে পারে। উদাহরণস্বরূপ, আমার প্রকল্প সর্বদা module.jsonউপস্থিত রয়েছে।

প্রোফাইল সক্রিয়করণ এক্সটেনশন ব্যবহার করে

প্রোফাইল সক্রিয়করণের জন্য কয়েকটি ম্যাভেন এক্সটেনশন রয়েছে। এখানে কাঁটাচামচার মধ্যে তাদের মধ্যে একটি: https://github.com/OenderZizka/el-profile- ਐਕটিভেটার-
এক্সটেনশন


1
ছোট সংশোধন বলে মনে হচ্ছে<file><exists>.</exists></file>
revau.lt

-1

আপনি ডিফল্ট প্রোফাইল সক্রিয় রাখতে পারবেন না, তবে আপনি সেই প্রোফাইলের সামগ্রীগুলি (আপনার উদাহরণে ...) নিতে পারেন এবং কেবল এটি পোমের মূল বিভাগে নিয়ে যেতে পারেন।

আপনি কেবল প্রোফাইলগুলি ব্যবহার করছেন বলে এর অর্থ এই নয় যে আপনি যা করছেন তা প্রোফাইলের মধ্যে থাকা দরকার।


এটি প্রশ্নের উত্তর দেয় না - ওপি স্পষ্টভাবে বলেছে যে প্রোফাইলটি "স্পষ্টভাবে নিষ্ক্রিয় না করা হলে সর্বদা সক্রিয় থাকতে হবে"। সম্ভবত কখনও কখনও এটি স্পষ্টভাবে অক্ষম করার প্রয়োজন হয়, যা এই উত্তরটির অনুমতি দেয় না।
স্লেস্কে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.