Maven لا يتعرف على وحدات الأخوة عند تشغيل MVN Temessency: Tree

StackOverflow https://stackoverflow.com/questions/1677473

سؤال

أحاول إعداد مشروع Maven متعدد الوحدات النمطية، ويبدو أن التبعيات بين الوحدات النمطية لا يتم إعدادها بشكل صحيح.

أملك:

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

في PRETER POM (التي لديها بوم من نوع التعبئة والتغليف) ثم الدلائل الفرعية 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

لماذا تفشل الاعتماد على "العموم"، على الرغم من أن المفاعل قد رأيته لأنه بنجاح يعالج شجرة التبعية؟ يجب أن لا يكون بالتأكيد الذهاب إلى "صافي للعثور عليه كما هو صحيح ...

بوم للتخزين:

<?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>

شكرا لأي اقتراحات!

(تعديل)

لتوضيح، ما أبحث عنه هنا هو: لا أريد أن أضطر إلى تثبيت الوحدة النمطية X لبناء الوحدة النمطية Y والتي تعتمد على x، مع إعطاء كلا الوحدات المشار إليها من نفس POM POM. هذا يجعلني بغيث لي أنه إذا كان لدي شيئين في نفس شجرة المصدر، لا يجب عليك تثبيت المنتجات الوسيطة لمتابعة الإنشاء. نأمل أن تفكيري يجعل بعض المنطقي هنا ...

هل كانت مفيدة؟

المحلول

أعتقد أن المشكلة هي أنه عند تحديد اعتماد، تتوقع أن يكون لدى Maven كجرة (أو أيا كان) تعبئتها ومتاحة من ريبو محلي على الأقل. أنا متأكد من أنه إذا كنت تعمل mvn install على مشروع العموم الخاص بك أولا كل شيء سيعمل.

نصائح أخرى

كما تمت مناقشته في هذه الصفحة الرئيسية قائمة الرسائل, ، الاعتماد: هدف الشجرة بمفرده سيبدو أشياء في المستودع بدلا من المفاعل. يمكنك التغلب على هذا من خلال تثبيت MVN، كما هو مقترح سابقا، أو القيام بشيء أقل شظية، مما يدعو المفاعل، مثل

mvn compile dependency:tree

تناسبني.

إن إدراك هذا مؤشر ترابط أقدم، لكن يبدو أن الأداة المتطورة أو ربما تم تفويت ذلك في المرة الأولى.

من الممكن أداء بناء يجعل التبعيات حل دون تثبيت عن طريق إجراء بناء مفاعل.

إذا قمت بتشغيل Build الخاص بك في الأصل الذي يصف بنية الوحدة النمطية لمشروعك، فسيتم حل تبعياتك بين وحداتك أثناء الإنشاء نفسه من خلال مفاعل Maven الداخلي.

بالطبع هذا ليس الحل الأمثل لأنه لا يحل بناء وحدة فردية واحدة داخل الهيكل. في هذه الحالة، لن يكون لدى مافن التبعيات في مفاعله وسوف تبحث عن حلها في المستودع. لذلك بالنسبة للفرد يبني، لا يزال يتعين عليك تثبيت التبعيات أولا.

هنا بعض المرجعي وصف هذا الوضع.

بالنسبة لي، ما أدى لي إلى هذا الموضوع كانت مشكلة مماثلة وكان الحل لضمان جميع الوحدة النمطية التي كان لدى بوم

 <packaging>pom</packaging>

كان الوالد

بوم.

DEP النموذجي الخاص بي لديه بوم - لذلك لم يتم العثور على جرة.

الشيء الوحيد الذي يعمل لي: التبديل إلى الخرج :(

أملك

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

ويمكنني فقط CD في War1 واستخدم MVN Tomcat7: Run-War. يجب أن أقوم دائما بتثبيت المشروع بأكمله من قبل، على الرغم من الحرب 1 يشير إلى الوالد الخاص به والأوردي المراجع War1 و Dep1 (كوحدات) لذلك يجب أن تكون جميع التبعيات معروفة.

أنا لا أفهم ما هي المشكلة.

في هيكل وحدة مافن مثل هذا:

- parent
  - child1
  - child2

سيكون لديك في parent pom هذه:

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

إذا كنت تعتمد الآن على child1 في child2 عن طريق وضع ما يلي في حياتك <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الملفات المترجمة.

مكافآت قبالة إجابه من عند دون ويليس:

إذا قام Build بإنشاء جارس اختبار لمشاركة رمز الاختبار بين تنشط مفاعلك، يجب استخدامه:

mvn test-compile dependency:tree

والتي سوف تسمح dependency:tree لتشغيل إلى الانتهاء في هذه الحالة.

تأكد من أن الوحدة النمطية التي تفشل في حلها في POM، تشير إلى الوالد المناسب من خلال تضمين التكوينات في ملف POM للوحدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top