مافن: بما في ذلك الجرة غير موجودة في المستودع العام

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

  •  20-09-2019
  •  | 
  •  

سؤال

إذا كنت أرغب في استخدام مكتبة الطرف الثالث لم تكن في مستودع Maven العام ، فما هي أفضل طريقة لإدراجها كاعتماد على مشروعي بحيث عندما يقوم شخص آخر بفحص الكود الخاص بي ، فسيظل قادرًا على إنشاء؟

بمعنى آخر

طلبي "A" يعتمد على جرة "B" التي لا توجد في المستودع العام. ومع ذلك ، أرغب في إضافة "B" كاعتماد على "A" بحيث يمكن لشخص على الجانب الآخر من العالم التحقق من الكود ولا يزال قادرًا على بناء "A"

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

المحلول

يمكنك تثبيت المشروع بنفسك.

أو يمكنك استخدام system النطاق مثل ما يلي:

<dependency>
    <groupId>org.group.project</groupId>
    <artifactId>Project</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/project-1.0.0.jar</systemPath>
</dependency>

systemPath يتطلب المسار المطلق للمشروع. لتسهيل الأمر ، إذا كان ملف JAR ضمن المستودع/المشروع ، يمكنك استخدامه ${basedir} الخاصية ، والتي ترتبط بجذر المشروع.

نصائح أخرى

إذا كان لديك مشروع أمين يحتوي على وحدة نمطية موجودة في هذا الموقف (يتطلب تبعية وليس في مستودع) ، فيمكنك إعداد مشروع الوالد الخاص بك لاستخدام المكون الإضافي exec-maven-plugin لتثبيت ملفك التابع التلقائي. على سبيل المثال ، اضطررت إلى القيام بذلك مع ملف election.net jar لأنه غير متاح للجمهور.

الوالد بوم:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <inherited>false</inherited>
            <executions>
                <execution>
                    <id>install-anet</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>mvn</executable>
                <arguments>
                    <argument>install:install-file</argument>
                    <argument>-Dfile=service/lib/anet-java-sdk-1.4.6.jar</argument>
                    <argument>-DgroupId=net.authorize</argument>
                    <argument>-DartifactId=anet-java-sdk</argument>
                    <argument>-Dversion=1.4.6</argument>
                    <argument>-Dpackaging=jar</argument>
                </arguments>
            </configuration>
        </plugin>
    </plugins>
</build>

في المثال أعلاه ، يوجد موقع الجرة في مجلد LIB لوحدة "الخدمة".

بحلول الوقت الذي تدخل فيه وحدة الخدمة مرحلة التحقق من الصحة ، ستكون الجرة متاحة في المستودع المحلي. ما عليك سوى الرجوع إليه بالطريقة التي قمت بإعدادها مجموعة GroupID ، والتحف ، وما إلى ذلك في POM الأصل. علي سبيل المثال:

<dependency>
    <groupId>net.authorize</groupId>
    <artifactId>anet-java-sdk</artifactId>
    <version>1.4.6</version>
</dependency>

قد يعمل استخدام نطاق النظام ولكن لا ينصح به حتى في مواصفات Maven. انها ليست محمولة.

من كتاب Maven:

النظام- يشبه نطاق النظام المقدم باستثناء أنه يتعين عليك توفير مسار صريح إلى الجرة على نظام الملفات المحلي. يهدف هذا إلى السماح بالتجميع ضد الكائنات الأصلية التي قد تكون جزءًا من مكتبات النظام. من المفترض أن تكون القطع الأثرية متاحة دائمًا ولا يتم النظر فيها في مستودع. إذا أعلنت أن النطاق ليكون نظامًا ، فيجب عليك أيضًا توفير عنصر SystemPath. لاحظ أن هذا النطاق لا ينصح به (يجب أن تحاول دائمًا الرجوع إلى التبعيات في مستودع Maven العام أو المخصص).

أفضل طريقة هي التثبيت على مستودعك المحلي أو لمستودع المؤسسات الخاص بك ليكون في متناول جميع أقرانك.

هذا سهل للغاية إذا كنت تستخدم مدير مستودع مثل Nexus.

بشكل عام ، يجب أولاً وضع جرة الطرف الثالث في مستودعك المحلي. بعد ذلك يمكنك استخدامه عن طريق إضافة التبعية إلى pom.xml.

علي سبيل المثال.

1. قم بتشغيل الجرة في مستودعك المحلي أولاً:

mvn install:install-file -Dfile=<path-to-file>

ملاحظة: يتطلب هذا الأمر إصدار Maven-Install-Plugin 2.5 أو لاحقًا. إذا لم يكن كذلك ، يمكنك الرجوع إلى هنا

2. استخدم الجرة عن طريق إضافة التبعية في POM.XML من Project الخاص بك.
فقط أضف هذا إلى pom.xml من مشروعك:

<dependency>
  <groupId>${the groupId in the jar's pom.xml}</groupId>
  <artifactId>${the artifactId in the jar's pom.xml}</artifactId>
  <version>${the version in the jar's pom.xml}</version>
</dependency>

3. يمكنك بعد ذلك حزمة أو نشر مشروعك عن طريق التشغيل mvn package أو mvn deploy

سيتم أيضًا إدراج جرة الطرف الثالث في الحزمة.

إذا كنت تستخدم مجموعة أدوات Groovy/Grail (GGTS) ثم يمكنك استيراد هذه التبعية الطرف الثالث مباشرة (ولكن تأكد من أن لديك هذا التبعية الطرف الثالث في مستودعك المحلي) باستخدام الخطوات أدناه:

  1. انتقل إلى Explorer Project وانقر بزر الماوس الأيمن على المشروع.
  2. انقر فوق يستورد اختيار.
  3. إنفاق مافن الخيار وحدد تثبيت أو نشر قطعة أثرية على مستودع Maven وانقر فوق التالي.
  4. الحواجب وحدد تلك التبعية الطرف الثالث باستخدام ملف قطعة أثريةالخيار وأدخل تفاصيل معرف المجموعة ومعرف القطع الأثرية والإصداراستخدام pom.xml ملف وانقر فوق ينهي

انتظر بعض اللحظة وربما كان الخطأ قد ذهب لهذه المشكلة.

عملت هذا الحل بالنسبة لي؛ 1. أنشأت ريبو محلي في الدليل الجذر لمشروع ونسخ جميع الجرار الخاص بي في 2. نفذت الأمر التالي لإنشاء ملفات POM والبيانات الوصفية اللازمة لكل جرة أحتاج إلى استخدامها ؛

mvn deploy:deploy-file -DgroupId=<somegroupid> -DartifactId=<someartifact> -Dversion=1.0.0 -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=<path to jar file>

قام هذا بإنشاء ملف جرة جديد مع ملف POM داخل ريبو المحلي ، وتمكنت من إدراجها في مشروعي كاعتماد مثل هذا ؛

    <dependency>
        <groupId>somegroupid</groupId>
        <artifactId>someartifact</artifactId>
        <version>1.0.0</version>
    </dependency>

ثم mvn package التأكد من أن تبعيات المشروع الخاصة بي يتم حلها وتعبئتها مع ملف الحرب الخاص بي.

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