كيفية تكوين التبعية الفرعية في Maven دون نشر الجرار؟

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

  •  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> على التبعية وابدأ بناء مفاعل من الوالد.

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