মাভেনের ডিস্ট্রিবিউশনম্যানেজমেন্ট সংস্থার প্রশস্ততা কীভাবে নির্দিষ্ট করবেন?


110

আমি কীভাবে অনেকগুলি (প্রায় 50+) মভেন 2 প্রকল্পগুলি সংগঠিত করব তা জানার চেষ্টা করছি, যাতে তারা একটি কেন্দ্রীয় নেক্সাস রিপোজিটরিতে স্থাপন করতে পারে। mvn deployলক্ষ্যটি ব্যবহার করার সময় , ডিস্ট্রিবিউশন ম্যানেজমেন্ট ট্যাগটিতে লক্ষ্যটি নির্দিষ্ট করা দরকার:

<distributionManagement>
   <repository>
      <id>nexus-site</id>
        <url>http://central_nexus/server</url>
   </repository>
</distributionManagement>

এখন, আমি চাই না যে প্রতিটি পিএম.এমএলএমএল (যারা 50+ এর মধ্যে) বার বার এই ব্লকটি ধারণ করে। আমার প্রথমটি যদিও settings.xmlফাইলটি হবে তবে এটি সেখানে সংজ্ঞায়িত করা (নকশা করে) সম্ভব নয় বলে মনে হয়। সুতরাং, প্রথম প্রশ্নটি হবে, কেন এটি মামলা? যদি এটি সম্ভব হয় তবে আমি ম্যাসন 2 বিতরণে সেটিংস.এক্সএমএল-এ এটি নির্দিষ্ট করতে পারি, যা সমস্ত বিকাশকারীকে বিতরণ করা যেতে পারে।

আমি খুঁজে পেল একমাত্র সম্ভাব্য সমাধান হ'ল একটি সংস্থা-প্রশস্ত মাস্টার-পম প্রকল্প তৈরি করা, যাতে এই সেটিংস থাকে এবং অন্য সমস্ত pom.xml <parent>ট্যাগের মাধ্যমে এই মাস্টার-পমের উপর নির্ভর করে । তবে এটি মাল্টি-মডিউল বিল্ডগুলিতে এক ধরণের অদ্ভুত দেখাচ্ছে:

- master configuration POM (pm)
- Project 1 parent pom (p1 with module 1 and module 2 as modules)
    - Project 1 module pom (with pm as parent)
    - Project 2 module pom (with pm as parent)

সাধারণত আমি সমস্ত ডকুমেন্টেশনে পড়েছি যে মডিউল পমগুলিকে প্যারেন্ট পম ব্যবহার করা উচিত, কিছু আলাদা নয়। কিন্তু উত্তরাধিকার বনাম সমষ্টি সম্পর্কে মভেন ওয়েবসাইটটি পড়ার পরে লেখা আছে যে এটি সত্যই সম্ভব।

আমি যে সমস্যাটি পেয়েছি তা হ'ল মেন সাইট জেনারেশনের সাথে, যা এই সেটআপটিতে সমস্যা বলে মনে হচ্ছে (মডিউলগুলি যদি সরাসরি ব্যাক-রেফারেন্স না থাকে তবে সঠিকভাবে সংযুক্ত হয় না)

সুতরাং, এটি একটি বৈধ পদ্ধতির? অন্য কোনও, আরও সুস্পষ্ট, সমস্যার সহজ সমাধান?



5
@ ওহাদআর: তারা কেবল একটি প্রকল্পে এটি কীভাবে লিখবেন তা লেখেন। পয়েন্টটি হ'ল আমি এটি প্রায় 500 বার নকল করতে
চাইনি

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

উত্তর:


144

এর সর্বোত্তম সমাধান হ'ল আপনার সংস্থা থেকে সমস্ত প্রকল্পের জন্য সাধারণ প্যারেন্ট পম ফাইল প্রকল্প (প্যাকেজিং 'পম' সহ) তৈরি করা।

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>your.company</groupId>
    <artifactId>company-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <distributionManagement>
        <repository>
            <id>nexus-site</id>
            <url>http://central_nexus/server</url>
        </repository>
    </distributionManagement>

</project>

এটি আপনার স্থানীয় নেক্সাসটি তৈরি, মুক্তি এবং স্থাপন করা যেতে পারে যাতে প্রত্যেকের কাছে এটির নিদর্শনগুলিতে অ্যাক্সেস থাকে।

এখন আপনি যে সমস্ত প্রকল্পগুলি এটি ব্যবহার করতে চান তার জন্য কেবল এই বিভাগটি অন্তর্ভুক্ত করুন:

<parent>
  <groupId>your.company</groupId>
  <artifactId>company-parent</artifactId>
  <version>1.0.0</version>
</parent>

এই সমাধান আপনাকে সহজেই আপনার সংস্থার সমস্ত প্রকল্পগুলিতে অন্যান্য সাধারণ জিনিসগুলি যুক্ত করতে দেয়। উদাহরণস্বরূপ আপনি যদি আপনার JUnit ব্যবহারকে একটি নির্দিষ্ট সংস্করণে মানক করতে চান তবে এটি তার জন্য উপযুক্ত জায়গা।

যদি আপনার এমন প্রকল্প রয়েছে যেগুলি তাদের নিজস্ব পিতামাতার সাথে একাধিক মডিউল কাঠামো ব্যবহার করে তবে মাভেন চেইন উত্তরাধিকারকেও সমর্থন করে যাতে আপনার প্রকল্পের প্যারেন্ট পম ফাইলটি আপনার কোম্পানির প্যারেন্ট পোমকে রেফারেন্স করা এবং প্রকল্পের শিশু মডিউলগুলি এমনকি আপনার সম্পর্কে অবগত না হওয়াও পুরোপুরি গ্রহণযোগ্য is সংস্থার পিতামাতা

আমি আপনার উদাহরণ প্রকল্প কাঠামো থেকে দেখতে পাচ্ছি যে আপনি আপনার পিতামাতাকে আপনার সমবেতকারী পোমের সমান স্তরে রাখার চেষ্টা করছেন। যদি আপনার প্রকল্পের নিজস্ব পিতামাতার প্রয়োজন হয় তবে আমি যে সর্বোত্তম পন্থা পেয়েছি তা হ'ল প্যারেন্টকে বাকী মডিউলগুলির সমান স্তরে অন্তর্ভুক্ত করা এবং যেখানে আপনার সমস্ত মডিউলগুলির ডিরেক্টরি উপস্থিত রয়েছে তার মূলে আপনার অ্যাগ্রিগেটর pom.xML ফাইলটি অন্তর্ভুক্ত করা।

- pom.xml (aggregator)
    - project-parent
    - project-module1
    - project-module2

আপনি এই কাঠামোটি দিয়ে যা করেন তা হ'ল আপনার অভিভাবক মডিউলটিকে একগ্রিগেটরে অন্তর্ভুক্ত করা এবং একটি দিয়ে সমস্ত কিছু তৈরি করা mvn install রুট ডিরেক্টরি থেকে ।

আমরা আমার সংস্থায় এই সঠিক সমাধানটি ব্যবহার করি এবং এটি সময়ের পরীক্ষায় দাঁড়িয়েছে এবং আমাদের পক্ষে বেশ ভালভাবে কাজ করেছে।


এখানে আরও একটি উত্তর দেওয়া আছে যেখানে আমি প্রকল্পের উত্তরাধিকারটি আরও বিশদে বিশদভাবে বর্ণনা করি এবং কীভাবে এটি উত্তরাধিকার সূত্রে জটিলতার পরিচালনা করতে পারি, তুষকে ক্ষমা করুন। ;) স্ট্যাকওভারফ্লো
জেসি ওয়েব

7
শুধু একটি ছোট নোট: কারণে কেন কোম্পানী পিতা বা মাতা সবচেয়ে ভালো সমাধান হয়, আলোচনা দেখুন settings.xml মধ্যে distributionManagement উল্লেখ করা যাবে না ম্যাভেন ব্যবহারকারীর তালিকা থেকে।
প্রেমেক ব্রাডা

ক্লাসিক পরামর্শের মডেলটিতে, যেখানে "ক্লায়েন্ট কোডের মালিক", আমার বিকাশকারী টিমের প্রকল্পটি অফ-সাইটে কাজ করতে হবে এবং তারপরে সর্বশেষতম কোডটি ক্লায়েন্ট-সাইটে নিয়ে গিয়ে আবার এটি তৈরি করতে হবে। আমার পরিস্থিতিতে, একটি বহু-মডিউল প্রকল্পের সাথে কাজ করা, যদি আমি প্রকল্পের প্যারেন্ট POM এ POM কোম্পানির রেফারেন্স করি তবে আমাকে ক্লায়েন্টের সংস্থা পিওএমকে নির্দেশ করার জন্য সেই রেফারেন্সটি আপডেট করতে হবে। আমি বরং সেটিং.এক্সএমএল-এ সমস্ত পরিবেশ নির্দিষ্ট সেটিংস বজায় রাখার চেষ্টা করব যদি আমি এটির সহায়তা করতে পারি আমার পরিস্থিতির জন্য প্রস্তাবিত পদ্ধতির কী?
ওয়েব ব্যবহারকারী

2
@ ওয়েবেউজার আপনার সমস্যাটিকে এমন পরিস্থিতিতে মনে হচ্ছে যেখানে আপনার পুম ফাইলে বিভিন্ন মান দরকার যা এই উত্তরটির ঠিকানার বিপরীতে: একাধিক মডিউল জুড়ে সদৃশ সেটিংস এড়ানো। আমি মনে করি আপনার একটি বৈশিষ্ট্যগুলি সেটিং.এক্সএমএল ফাইলের মাধ্যমে ইনজেকশন দেওয়ার চেষ্টা করা উচিত । যদি এটি আপনাকে সহায়তা না করে, তবে এখানে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন, এর সাথে এখানে লিঙ্ক দিন এবং আমি আপনাকে আরও সহায়তা করার চেষ্টা করব।
জেসি ওয়েব

ধন্যবাদ @ জেসে ওয়েব আমি চেষ্টা করেও শেষ করেছিলাম এবং আমি বর্ণিত পরিস্থিতির জন্য POM থেকে দূরে থাকা সেই মানগুলিকে বিমূর্ত করা কার্যকর। আমার প্রয়োজনের জন্য, আমি সক্রিয় প্রোফাইলের অধীনে প্রাসঙ্গিক সম্পত্তি যুক্ত করেছি এবং POM এ সমাধান করা হয়েছে।
ওয়েব ব্যবহারকারী

36

প্যারেন্ট পুমের দরকার নেই।

আপনি বিতরণ ব্যবস্থাপনার অংশটি পুরোপুরি আপনার পোমগুলিতে বাদ দিতে পারেন এবং এটি আপনার বিল্ড সার্ভারে বা সেটিংস.এক্সএমএলে সেট করতে পারেন।

বিল্ড সার্ভারে এটি করতে, কেবল mvnকমান্ডটি পাস করুন :

-DaltSnapshotDeploymentRepository=snapshots::default::https://YOUR_NEXUS_URL/snapshots
-DaltReleaseDeploymentRepository=releases::default::https://YOUR_NEXUS_URL/releases

কোন বিকল্পগুলি সেট করা যেতে পারে তার বিশদের জন্য https://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html দেখুন ।

এটি আপনার মধ্যে সেট করাও সম্ভব settings.xml

কেবল সেখানে একটি প্রোফাইল তৈরি করুন যা সক্ষম এবং এতে সম্পত্তি রয়েছে।

উদাহরণসমূহ सेटिंगস.এক্সএমএল:

<settings>
[...]
  <profiles>
    <profile>
      <id>nexus</id>
      <properties>
        <altSnapshotDeploymentRepository>snapshots::default::https://YOUR_NEXUS_URL/snapshots</altSnapshotDeploymentRepository>
        <altReleaseDeploymentRepository>releases::default::https://YOUR_NEXUS_URL/releases</altReleaseDeploymentRepository>
      </properties>
    </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>nexus</activeProfile>
  </activeProfiles>

</settings>

"স্ন্যাপশট" এবং "রিলিজ" এর শংসাপত্রগুলি <servers>আপনার সেটিংস.এক্সএমএল বিভাগে রয়েছে তা নিশ্চিত করুন

মানচিত্র-ডিপ্লোয়-প্লাগইন সংস্করণ 2.8 সহ AltSnapshotDepدامRepository এবং #ReleaseDepدامRepository বৈশিষ্ট্যগুলি প্রবর্তিত হয়েছে। পুরানো সংস্করণগুলি ত্রুটি বার্তার সাথে ব্যর্থ হবে

Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter

এটি ঠিক করতে, আপনি প্লাগ-ইনটির একটি নতুন সংস্করণ প্রয়োগ করতে পারেন:

        <build>
          <pluginManagement>
            <plugins>
              <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8</version>
              </plugin>
            </plugins>
          </pluginManagement>
        </build>

আমি একটানা এই সমাধান চেষ্টা করছি কিন্তু শুধুমাত্র altDeploymentRepository সম্পত্তি কাজ করে। #RelayDep دام Repository এবং AltSnapshotDep دام Repository স্বীকৃত নয় এবং আমি এই ত্রুটিটি পেয়েছি: স্থাপনা ব্যর্থ হয়েছে: বিতরণব্যবস্থাপনার উপাদানটির ভিতরে POM এ সংগ্রহস্থল উপাদান নির্দিষ্ট করা হয়নি বা -ডাল্টপেইজমেন্টরেপোসিটি = আইডি :: লেআউট :: url প্যারামিটে te কোন পরামর্শ সাহায্য করবে। ধন্যবাদ
শাবিরমিয়ান

@ শবির্মিয়ান কারণটি প্লাগ-ইন মোতায়েনের একটি পুরানো সংস্করণ। আমি আমার উত্তরটি একটি সমাধান দিয়ে প্রসারিত করেছি।
মাইকেল ওয়াইরাজ

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