Maven لا يتعرف على وحدات الأخوة عند تشغيل MVN Temessency: Tree
-
16-09-2019 - |
سؤال
أحاول إعداد مشروع 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
الملفات المترجمة.
تأكد من أن الوحدة النمطية التي تفشل في حلها في POM، تشير إلى الوالد المناسب من خلال تضمين التكوينات في ملف POM للوحدة.