سؤال

لقد حصلت على القطع الأثرية التي تم بناؤها وإطلاقها باستخدام Maven. يحتوي Pom.xml الأصلي الخاص بـ Artefact على معلومات المشروع المعتادة (Artifactid ، الاسم ، إلخ) والتبعيات. هذا جيّد. لكن pom.xml يتضمن أيضًا معلومات خاصة مثل عناوين URL SCM أو أسماء المطورين أو الوالدين.

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

لا تعتبر عناوين URL SCM ، ولا قائمة المطورين ولا وجود الوالدين (والتي يتم استخدامها فقط لتعريفات DEPMGMT وغيرها صدر pom.xml

يحتوي POM.xml في كل من مدير المستودع مثل Archiva والتعبئة داخل ملف JAR الخاص بالفيروسات على تلك المعلومات. أفترض أن Maven يقوم بنسخ الأمر برمته.

كي تختصر:

أملك:

<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.example</groupId>
   <artifactId>my-artifact</artifactId>
    <scm>
        <connection>scm:svn:http://buildmachine/org.example/my-artifact/trunk</connection>
        <developerConnection>scm:svn:http://buildmachine/org.example/my-artifact/trunk</developerConnection>
        <url>http://buildmachine/org.example/my-artifact/trunk</url>
    </scm>
    <dependencies>
        <dependency>
            ...
        </dependency>
    </dependencies>

أريد:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>my-artifact</artifactId>
    <dependencies>
        <dependency>
            ...
        </dependency>
    </dependencies>
هل كانت مفيدة؟

المحلول

لا أعرف الحل الأمثل لمشكلتك ، ولكن يمكن القيام ببعض الأشياء. هذه هي الاختراقات ، لكنها قد تساعد.
أولاً ، تخرج المعلومات الخاصة من POM (مثل SCM ، أسماء المطورين وما إلى ذلك). بالنسبة لبيانات تعريف SCM ستكون:

<scm>
   <connection>${my.scm.connection}</connection>
   <developerConnection>${my.scm.developerConnection}</developerConnection>   
   <url>${my.scm.url}</url>
</scm>

ثانياً ، نقل الخصائص إلى ملف الإعدادات وضعها في ملف تعريف. في ملف الإعدادات ، يمكنك أيضًا "إخفاء" مستودع شركتك الخاص. إذا كان عليك مشاركة ملفات التعريف/الإعدادات mvn -gs path_to_global_settings أو إعداد تثبيت Maven المشترك مع هذه الإعدادات.
قسم POM الوالدين للأسف يجب أن يبقى دون أن يمس.

نصائح أخرى

لا يحتوي المكون الإضافي للإصدار على دعم مدمج لهذا ، على حد علمي. احتمالين تتبادر إلى الذهن:

الخيار 1:

  • لا تشمل POM في الجرار الخاصة بك - يمكنك التحكم في هذا باستخدام المعلمة "الأرشيف" إلى إناء هدف. <archive><addMavenDescriptor>false</addMavenDescriptor></archive>
  • اكتب برنامجًا لتجريد العناصر التي لا تريدها في POM المنشورة. يجب عليك القيام بذلك بين الإصدار: الاستعداد والإصدار: أداء ، والذي من المحتمل أن يعمل فقط إذا كان لديك دعم في SCM الخاص بك لتعديل العلامات بعد الإنشاء ، أو إجراء التعديل تحت علامة/فرع مختلف ثم الإصدار: أداء من هناك.

أعتقد أن الخيار 1 هو Yucky.

الخيار 2:

  • حاول الاستفادة من معلمة التحضير إلى المكون الإضافي للإصدار. إذا كنت تستطيع كتابة معالجة POM كإجراءات Maven ، فهو ذلك قد يكون من الممكن القيام بذلك بهذه الطريقة.

أعتقد أن الخيار 2 أصعب.

إذا لم ينجح أي من هذا ، فمن المحتمل أن يتعين عليك استخدام شيء مثل الإصدار: المسرح والقيام بالتعقيم باليد ، لكنك لا تزال ترغب في استبعاد POMs من محتويات الجرة.

يمكنك إنشاء النموذج الأصلي الخاص بك لهذا وإطلاقه للجمهور. يمكن للمستخدمين بعد ذلك استرداد النموذج الأصلي وإعداد مشروعهم الخاص بناءً على النموذج الأصلي.

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

لإنشاء مشروع جديد يعتمد على نموذج أصلي ، يحتاج المرء إلى الاتصال mvn archetype:generate الهدف ، مثل ما يلي:

  mvn archetype:generate                              \
  -DarchetypeGroupId=<archetype-groupId>              \
  -DarchetypeArtifactId=<archetype-artifactId>        \ 
  -DarchetypeVersion=<archetype-version>              \
  -DgroupId=<my.groupid>                              \
  -DartifactId=<my-artifactId>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top