এমভিএন নির্ভরতা: ট্রি চলাকালীন মাভেন ভাইবোন মডিউলগুলি চিনতে পারে না


90

আমি একটি মাল্টি-মডিউল মাভেন প্রকল্প স্থাপন করার চেষ্টা করছি এবং আন্তঃ-মডিউল নির্ভরতা আপাতদৃষ্টিতে সঠিকভাবে সেট আপ করা হচ্ছে না।

আমার আছে:

<modules>
  <module>commons</module>
  <module>storage</module>
</modules>

প্যারেন্ট পিওমে (যার একটি প্যাকেজিং-টাইপ পোম রয়েছে) এবং তারপরে সাব-ডিরেক্টরি commons/এবং storage/যা একই নাম দিয়ে জেআর পম সংজ্ঞায়িত করে।

স্টোরেজ কমন্স উপর নির্ভর করে।

মূল (মাস্টার) ডিরেক্টরিতে, আমি চালিয়ে mvn dependency:treeদেখি:

[INFO] Building system
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] domain:system:pom:1.0-SNAPSHOT
[INFO] \- junit:junit:jar:3.8.1:test
[INFO] ------------------------------------------------------------------------
[INFO] Building commons
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
...correct tree...
[INFO] ------------------------------------------------------------------------
[INFO] Building storage
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
Downloading: http://my.repo/artifactory/repo/domain/commons/1.0-SNAPSHOT/commons-1.0-SNAPSHOT.jar
[INFO] Unable to find resource 'domain:commons:jar:1.0-SNAPSHOT' in repository my.repo (http://my.repo/artifactory/repo)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

Missing:
----------
1) domain:commons:jar:1.0-SNAPSHOT

"কমন্স" এর উপর নির্ভরতা কেন ব্যর্থ হয়, যদিও চুল্লিটি স্পষ্টতই দেখে ফেলেছে যে এটি সাফল্যের সাথে তার নির্ভরতা গাছটি প্রক্রিয়া করে? এটি ঠিক যেমন এটি ঠিক আছে ঠিক তেমন এটি 'নেট' এ যাওয়া উচিত নয় ...

স্টোরেজ জন্য pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <packaging>jar</packaging>
  <parent>
    <artifactId>system</artifactId>
    <groupId>domain</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <groupId>domain</groupId>
  <artifactId>storage</artifactId>
  <name>storage</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <!-- module dependencies -->
    <dependency>
      <groupId>domain</groupId>
      <artifactId>commons</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

    <!-- other dependencies -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

কোন পরামর্শের জন্য ধন্যবাদ!

(সম্পাদনা)

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


4
আহ, সম্পাদনা নিখুঁত। কেন আপনি প্রথম অভিপ্রায় লিখেছেন না? এছাড়াও, হতে পারে শিরোনামটি পরিবর্তনের বিষয়টি বিবেচনা করুন :) আমি পিক হতে চাইছি না, এটি কেবল স্বচ্ছতা এবং শ্রেণিবিন্যাসের জন্য। এটি ভবিষ্যতে পুরো সম্প্রদায়কে অনুরূপ ইস্যুটি অনুসন্ধানের ক্ষেত্রে সহায়তা করবে (যা নির্ভরতা সম্পর্কিত প্রকৃত শিরোনাম এবং বিষয়বস্তু দিয়ে স্ফটিক পরিষ্কার নয়)
পাস্কাল থিভেন্ট

4
ওহে. সমাধান কি খুঁজে পেয়েছেন? আমারও এই সমস্যাটি রয়েছে :(

4
সংকলন ব্যর্থ হয়, বা কেবল নির্ভরতা: গাছের লক্ষ্য একা? ডন উইলিসের উত্তর দেখুন।
মেটামেট

ওএমজি তাই একটি মডিউলে যদি এটি ব্যর্থ হয় কারণ এটি অন্য মডিউলের প্রতীক খুঁজে না পায়, অন্যটিকে নির্ভরতা হিসাবে যুক্ত করা উচিত এবং জেআর হিসাবে ইনস্টল করা উচিত? এটিই মূল কী ....
ওয়েস্টার্নগুন

এটা দুঃখজনক maven 3.6 এখনও এই সমস্যাটি সমাধান করে না
yuxh

উত্তর:


21

আমি মনে করি সমস্যাটি হ'ল আপনি যখন কোনও নির্ভরতা নির্দিষ্ট করেন তখন মাভেন এটি জার (বা যাই হোক না কেন) প্যাকেজ হিসাবে প্রাপ্ত এবং কমপক্ষে একটি স্থানীয় রেপো থেকে উপলব্ধ হওয়ার প্রত্যাশা করে। আমি নিশ্চিত যে আপনি যদি mvn installপ্রথমে আপনার কমন্স প্রকল্পটি চালান তবে সবকিছু কাজ করবে।


4
উত্স ট্রিতে মডিউলটির যে কোনও সংস্করণ ব্যবহার করা উচিত তা নির্দিষ্ট করে দেওয়ার কোনও উপায় আছে কি? আমি ভেবেছিলাম যে এই মামলাটি স্বয়ংক্রিয়ভাবে পরিচালিত হবে। আমি চাই না / মনে হয় না মাভেনকে প্রতিবারই পুরো প্রকল্পটি তৈরি করতে চাইলে বিল্ড-ইনস্টল-বিল্ড-ইনস্টল-বিল্ড করতে হবে!
স্টিভেন শ্লানস্কার

38
আপনি সঠিক যে ইনস্টল চলমান এটি ঠিক করে দেয়। যাইহোক, এখন আমাকে প্রতিবার পরিবর্তন করার সময় ইনস্টল করতে হবে যা আমি চাই না। আমি চাই যে স্টোরেজ প্রকল্পটি কমন্স প্রকল্প থেকে সর্বশেষতম কোডটি বেছে নেবে।
স্টিভেন শ্লানস্কার

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

@ স্টিভেন দয়া করে আপনার উদ্বেগকে অন্য প্রশ্ন হিসাবে পোস্ট করুন, কোনও মন্তব্যে উত্তর দেওয়া সহজ নয় এবং এটি অন্য একটি বিষয়।
পাস্কাল থিভেন্ট

6
এটি মূল প্রশ্ন হওয়ার উদ্দেশ্য ছিল, আমি কেবল স্পষ্ট করে বলছিলাম। আমি কি মূল প্রশ্নে এটি পরিষ্কার করে দিয়েছি না যে একই প্রকল্পে অন্যান্য মডিউল তৈরির জন্য আমার উদ্দেশ্য হ'ল স্থানীয় পণ্য সংগ্রহস্থলগুলিতে থাকা প্রয়োজন?
স্টিভেন শ্লানস্কার

104

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

mvn compile dependency:tree

আমার জন্য কাজ কর.


4
সস্তা সস্তা কাজের জন্য আপনাকে ধন্যবাদ। তবে এটি কি বাগ? আমি নির্ভরতা আশা করি: গাছের লক্ষ্য কোনও কৌশল ছাড়াই চুল্লিটির উপর নির্ভর করে।
এমকুলিভ

এটি লক্ষ্য করা উচিত যে বিশ্বব্যাপী যে কোনও কাজের জন্য একই পরিস্থিতি ঘটে তবে কেবল কয়েকটি উপ-প্রকল্পকে প্রভাবিত করে।
tkruse

দুর্ভাগ্যক্রমে, compileট্রানজিটিভ নির্ভরতা ডাউনলোডগুলি ট্রিগার করে। বাস্তবে ডাউনলোড না করে নির্ভরতা গাছের তালিকা করার কোনও উপায় আছে (অবশ্যই পিওএমগুলি বাদে)?
sschuberth

অন্যান্য লক্ষ্যেও আমার একই সমস্যা ছিল। যুক্ত করা compile( validateযথেষ্ট নয়) সেখানেও সহায়তা করেছে: mvn compile animal-sniffer:checkএবংmvn compile org.basepom.maven:duplicate-finder-maven-plugin:check
মিশা

আপনার বিল্ডের উপর নির্ভর করে কিছু মডিউলগুলির মধ্যে পরের পর্যায়গুলিতে নির্মিত শিল্পকর্মগুলির উপর নির্ভরতাও থাকতে পারে। আমার ক্ষেত্রে একটি জিপ ফাইল (মাভেন-এসেম্বলি-প্লাগইন ব্যবহার করে) packageধাপে নির্মিত হয়েছিল , সুতরাং আমার যেমন করা দরকার mvn package animal-sniffer:check
মিশা

6

এটি উপলব্ধি করা একটি পুরানো থ্রেড তবে মনে হচ্ছে যে কোনওটি সরঞ্জামটি বিকশিত হয়েছিল বা এটি সম্ভবত প্রথমবারের মতো মিস হয়েছে।

কোনও বিল্ট সম্পাদন করা সম্ভব যা কোনও চুল্লি বিল্ড না করে ইনস্টল না করে নির্ভরতাগুলি সমাধান করে।

আপনি যদি আপনার প্রকল্পের মডিউল কাঠামো বর্ণনা করে এমন প্যারেন্টে আপনার বিল্ড শুরু করেন তবে অভ্যন্তরীণ মাভেন চুল্লির মাধ্যমে বিল্ড করার সময় আপনার মডিউলগুলির মধ্যে আপনার নির্ভরতাগুলি সমাধান করা হবে।

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

এই পরিস্থিতি বর্ণনা করে এখানে কিছু রেফারেন্স দেওয়া হচ্ছে ।


4
প্রথমে নির্ভরতা ইনস্টল না করে এবং সম্পূর্ণ প্যারেন্ট প্রজেক্টটি তৈরি না করেই কি কোনও একক মডিউল তৈরির উপায় আছে?
কিট আছে - অ্যানি-মৌসে

4
উত্তরটি সম্পূর্ণ করতে - যদি প্লাগইন সরাসরি (বিনা পর্যায় ছাড়াই) আহ্বান করা হয় mvn dependency:treeতবে আপনি যদি compileপর্যায়টি না চান তবে এটি উত্স থেকে নির্ভরতাগুলি সমাধান করবে না । তাই এই পরিবর্তে কাজ করবে: mvn compile dependency:tree
স্ট্যানিস্লাভ বাশকির্তসেভ

3

আমার জন্য, আমাকে এই থ্রেডে নিয়ে যাওয়ার কারণটিও একই রকম সমস্যা ছিল এবং সমাধানটি ছিল সমস্ত মডিউল নির্ভরতা পমকে নিশ্চিত করা

 <packaging>pom</packaging>

বাবা ছিল

pom

আমার মডেল ডিপের পোম ছিল - সুতরাং খুঁজে পাওয়ার মতো কোনও জার নেই।


এটি আমার জন্য এই ত্রুটিটি ছুড়ে ফেলেছে: পিওএম পড়ার সময় ত্রুটি। কারণ: অচেনা ট্যাগ: 'প্যাকেজিং'
হিতউইন

সম্পাদনা: আমার অর্থ <প্যাকেজিং> পম </ প্যাকিং> এটি ঠিক করেছে। <প্যাকেজিং> জার </ প্যাকেজিং> প্রতিস্থাপন করা হয়েছে
বাসসটনার

4
এটি প্রশ্নে বর্ণিত সমস্যাটি সমাধান করে তবে এখন শিশু মডিউলগুলি রফতানযোগ্য সংরক্ষণাগারগুলি তৈরি করে না (যেমন জার, যুদ্ধ, কান)।
শেলডনহ

শেলডনহ আপনি এই ত্রুটিটি সমাধানের জন্য কোনও সমাধান খুঁজে পেয়েছেন এবং একটি রফতানযোগ্য সংরক্ষণাগার তৈরি করেছেন?
ব্যবহারকারী3853134

3

আমার জন্য কাজ করা একমাত্র জিনিস: গ্রেডে পরিবর্তন :(

আমার আছে

Parent
  +---dep1
  +---war1 (using dep1)

এবং আমি সবেমাত্র ওয়ার 1 এ সিডি করতে পারি এবং এমভিএন টমক্যাট 7: রান-ওয়ার ব্যবহার করতে পারি। আমাকে সর্বদা পুরো প্রকল্পটি ইনস্টল করতে হবে, যদিও যুদ্ধের1 উল্লেখ তার পিতামাতা এবং পিতা-মাতার উল্লেখ war1 এবং dep1 (মডিউল হিসাবে) রেফারেন্স সত্ত্বেও সমস্ত নির্ভরতা জানা উচিত।

সমস্যাটি কী তা আমি বুঝতে পারি না।


4
এই কারণেই যখন আমি মাল্টি-মডিউল প্রকল্প তৈরি করতে পারি তখন আমি গ্রেডেল ব্যবহার করি। :(
Zhuo YING

2

এর মতো কোনও ম্যাভেন মডিউল কাঠামোতে:

- parent
  - child1
  - child2

আপনার এটিতে থাকবে parent pom:

<modules>
  <module>child1</module>
  <module>child2</module>
</modules>

আপনি এখন উপর নির্ভর করে তাহলে child1child2আপনার নিম্নলিখিত রেখে <dependencies>মধ্যে child2:

<dependency>
  <groupId>example</groupId>
  <artifactId>child1</artifactId>
</dependency>

আপনি একটি ত্রুটি পাবেন যাটির জন্য জেআর child1পাওয়া যাবে না। এই ঘোষণা করে সমাধান করা যেতে পারে <dependencyManagement>সহ ব্লক child1মধ্যে pomজন্য parent:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>example</groupId>
      <artifactId>child1</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</dependencyManagement>

child1যখন আপনি একটি চালানোর এখন বিল্ড হতে হবে compileবা packageইত্যাদি লক্ষ্য parent, এবং child2পাবেন child1এর কম্পাইল ফাইল।


2

বন্ধ Bonusing উত্তর থেকে ডন উইলিস :

যদি আপনার বিল্ডটি আপনার চুল্লি সাব-মডিউলগুলির মধ্যে পরীক্ষার কোডটি ভাগ করে নেওয়ার জন্য টেস্ট-জার তৈরি করে তবে আপনার ব্যবহার করা উচিত:

mvn test-compile dependency:tree

যা dependency:treeএক্ষেত্রে সম্পূর্ণ হতে চলেছে।


-1

নিশ্চিত করুন যে মডিউলটি ব্যর্থ হচ্ছে তা পম-এ সমাধান হয়ে গেছে, মডিউলটির পম ফাইলের কনফিগারেশনগুলি অন্তর্ভুক্ত করে সঠিক পিতামাতার দিকে নির্দেশ করছে।

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