كيفية تكوين التبعية الفرعية في Maven دون نشر الجرار؟
-
24-09-2019 - |
سؤال
لقد غوغل هذا ويبدو أنه لا يوجد أحد لديه إجابة ، ومع ذلك يبدو أنه شيء أولي لدرجة أنه يجب أن يكون ممكنًا.
لدي هيكل المشروع التالي:
parent
---sub-project1
---sub-project2
يجب أن يكون لدى Sub-Project2 مشروعًا فرعيًا كإثارة.
لذلك لدي هذا في POM Sub-Project2:
<dependencies>
<dependency>
<artifactId>sub-project1</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
....
عندما أفعل ذلك ، يحاول Maven تحميل ملف sub-project1.jar ، وهو غير موجود لأنه ليس جاهزًا لإعادة الريبو بعد.
حاولت وضع ملف <scope>import</scope>
في التبعية ، لكن هذا لم ينجح أيضًا - نفس النتيجة.
إذن ما الذي يجب علي فعله للحصول على Maven للنظر في المشروع الفرعي 1 عند بناء مشروع فرعي 2؟
تعديل فيما يلي بعض قصاصات POM:
الأبوين:
<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>
<prerequisites>
<maven>2.0.9</maven>
</prerequisites>
<modules>
<module>sub-project1</module>
<module>sub-project2</module>
</modules>
....
مشروع فرعي 1:
<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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>parent</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sub-project1</artifactId>
....
المشاريع الفرعية 2:
<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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>parent</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sub-project1</artifactId>
<dependencies>
....
<dependency>
<artifactId>sub-project2</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
<scope>import</scope>
</dependency>
</dependencies>
الخطأ الذي أحصل عليه عندما حصلت mvn clean install
على الوالد:
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
مع الكثير من الفئات/الحزمة غير موجودة أخطاء
المحلول
يجب أن يكون لديك ماجستير على مستوى الوالدين ، حيث ستقوم بإدراج وحدات مشروعك.
<modules>
<module>sub-project1</module>
<module>sub-project2</module>>
</modules>
في كل مشروع فرعي ، عليك الرجوع إلى والديك:
<parent>
<artifactId>parent</artifactId>
<groupId>mygroup</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
وتحدد التبعيات بين المشروع كما فعلت. أعتقد أنك فاتتك بعض الخطوات التي وصفتها.
تحرير: يجب أن تصدر الخاص بك MVN تثبيت نظيف على مستوى الوالدين.
نصائح أخرى
عندما أفعل ذلك ، يحاول Maven تحميل ملف sub-project1.jar ، وهو غير موجود لأنه ليس جاهزًا لإعادة الريبو بعد.
هذا هو السلوك الطبيعي ، يحل Maven التبعيات من خلال المستودع المحلي لذلك تحتاج إلى ذلك install
فرعي المشروع 1 أولاً. في الواقع ، تتمثل الطريقة الشائعة للتعامل مع هذا النوع من المواقف في إطلاق بناء مفاعل (بناء متعدد الأناقة) من الوالد.
على افتراض أنك تجمع الوحدات النمطية في الوالد ، أي أن لديك شيء مثل هذا المعلن في "الوالد" pom.xml
:
<modules>
<module>sub-project1</module>
<module>sub-project2</module>>
</modules>
مجرد cd
في الدليل الأصل وإطلاق بناء مفاعل:
$ cd parent
$ mvn install
سوف مافن بعد ذلك حساب ترتيب البناء (تم خصمها من الرسم البياني الموجهة المصنوع من الوحدات النمطية وتبعياتها) وتشغيلها install
على جميع الوحدات في الترتيب المحسوب (الأصل أولاً ، ثم الفرعية الفرعية وأخيراً ، فإن المشروع الفرعي 2 للحصول على مثالك الخاص).
لكن لا تستخدم أ الكائن من النوع import
, ، أنت تسيء استخدامه هنا. أزلها.
تحديث: تم تحديث السؤال أثناء الإجابة ، ولم يوضح POMs أي الموقف الوارد في السؤال الأصلي (التبعية العكسية ، الخطأ المحتمل في معرف القطع الأثرية). لكن النهج المقترح لا يزال ينطبق. مسح ال <scope>import</scope>
على التبعية وابدأ بناء مفاعل من الوالد.