سؤال

في مشروع Maven الخاص بنا ، نحاول بنية الدليل التالية (مع إجمالي حوالي 80 مشروعًا ، يتم عرض عدد قليل فقط حتى تحصل على الفكرة):

myappli      (pom)
-- module1       (pom)
--|-- utils    (pom)
--|-- ejb       (pom)
--|--|-- myappli-module1-a-ejb    (jar)
--|--|-- myappli-module1-b-ejb    (jar)
--|-- war       (pom)
--|-- applet       (pom)
...
-- module6       (pom)
--|-- utils       (pom)
--|-- ejb       (pom)
--|--|-- myappli-module6-c-ejb    (jar)
--|-- war       (pom)
--|-- applet       (pom)

ملاحظة: هذا أ مستوي هيكل Maven ، لأن جميع المشاريع غير الأوراق لها ملف packaging قيمة "بوم". (CF BetterBuildswithmaven كتاب).

نحدد إصدارات التبعية في "dependencyManagement"، في ال "myappli"بوم. هذا يعمل بشكل جيد.

مشكلتنا هي إعادة استخدام التبعيات نفسها. على سبيل المثال ، تبعيات EJB شائعة في جميع مشاريع EJB (حسب التصميم). لا نريد قطع الصغار ، والحفاظ على كل ذلك مع كل تغيير!

كنا نفكر في استخدام بعض "الفكرة استيراد"بالنسبة إلى تبعيات EJB ، وتحديد تبعيات EJB لدينا مرة واحدة على مستوى التطبيق. كانت محاولاتنا غير الناجحة:

  • المافن "parent pom"ستكون الفكرة على ما يرام ، لكنها تستخدم بالفعل من قبل الوحدات ، لذلك فهي غير متوفرة لمتطلباتنا.
  • لا يوجد مرفق استيراد موجود في Maven (باستثناء الإدارة)
  • لم يتم التعرف على تعريف كيان XML. لقد جربنا بوم مثل ما يلي ، وحصلنا على الخطأ
    "Reason: Parse error reading POM. Reason: could not resolve entity named 'ejbDependencies'":

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE project [
    <!ENTITY ejbDependencies SYSTEM "./ejbDependencies.txt">
    ]>
    <project ...
    ...
    &ejbDependencies;
    ...


تحرير : أحاول الحل الذي اقترحه روبرت ، لكن هناك خطأ ما.

عندما أقوم بتجميع مشروع EJB الخاص بي ، لا يجد التبعيات نفسها. أحصل على خطأ عند التجميع (MVN Compile) ، قائلة إن حزمة Javax.ejb مفقودة.

ملاحظة: قمت بتشغيل "MVN Install" في مشروع التبعيات من قبل.

هذا هو التكوين الخاص بي:

<project ...>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>myproj-maven</artifactId>
    <version>3.1-SNAPSHOT</version>
  </parent>

  <groupId>com.company</groupId>
  <artifactId>myproj-maven-ejb</artifactId>
  <version>${myproj-version}</version>
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>javax.ejb</groupId>
      <artifactId>ejb</artifactId>
    </dependency>

    <dependency>
      <groupId>ojdbc</groupId>
      <artifactId>ojdbc</artifactId>
    </dependency>
  </dependencies>
</project>

---------------------------------
<project ...>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.company</groupId>
    <artifactId>myproj-identite-ejb</artifactId>
    <version>3.1-SNAPSHOT</version>
  </parent>

  <groupId>com.company</groupId>
  <artifactId>myproj-identite-metier</artifactId>
  <name>SNR IDENTITE METIER</name>
  <version>2.0.1</version>
  <packaging>ejb</packaging>

  <dependencies>
    <dependency>
      <groupId>com.company</groupId>
      <artifactId>myproj-maven-ejb</artifactId>
      <version>${myproj-version}</version>
      <type>pom</type>
    </dependency>
  </dependencies>
</project>

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

+---maven
|   \---ejb
+---identite
|   +---ejb
|   |   \---SNR_IDENTITE_METIER

تحرير:

الإجابة التي قدمها الشعاب المرجانية تبدو صحيحة. من المستحيل القيام به مع Maven ، لأن تبعيةنا يتم توفيرها ، وبالتالي ليست متعدية :-(

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

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

المحلول

هل تبعياتك المستوردة لها قدمت الكائن؟ في الواقع هذا النطاق ليس متعددًا (انظر Maven نطاقات التبعية).

هذا يمكن أن يكون سبب عدم الاستبدال.

نصائح أخرى

يمكنك استخدام تبعيات بوم لاستيراد التبعيات إلى مشاريع تعسفية.

يمكن أن يبدو مشروع POM مشابهًا لـ:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>persistence-deps</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate</artifactId>
      <version>${hibernateVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-annotations</artifactId>
      <version>${hibernateAnnotationsVersion}</version>
    </dependency>
  </dependencies>
</project>

ويتم استيراده على النحو التالي:

<dependency>
  <groupId>com.example</groupId>
  <artifactId>persistence-deps</artifactId>
  <version>1.0</version>
  <type>pom</type>
</dependency>

يرى Maven ، الدليل النهائي - التبعيات التجميع للتفاصيل.

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