it-swarm.dev

كيفية تضمين ملف تهيئة في مجلد "META-INF/services" الخاص بجرة JAR باستخدام Maven

أنا أعمل على مشروع Java في Eclipse ، تم تصميمه باستخدام Maven. أستخدم بعض التعليمات البرمجية المعاد تدويرها من مشروع قديم ، وتبحث إحدى هذه الفئات عن ملف في مجلد "META-INF/services" في JAR باسم معين ، ثم يوزع نص هذا الملف. في هذا المثال بالذات ، يبحث عن ملف باسم واجهة Java ، ثم ينتزع اسم الفئة للتنفيذ من داخل الملف.

إذاً ما أحاول القيام به بشكل أساسي هو تضمين ملف في مجلد "META-INF/services" من JAR مع اسم ملف (X) ، وسطر واحد من النص (Y) . أعتقد أنه يجب القيام بذلك باستخدام Maven ، ربما عن طريق تحديد سمة في ملف POM ، لكن بحثي لم يظهر أي شيء. أعلم أنك لا يُفترض أن تكون رمزًا ثابتًا أو تكتب يدويًا أي ملفات META ، لذلك لست متأكدًا مما يجب فعله هنا.

شكرا لك مقدما.

63
Matt Vukas

قم بإنشاء مجلد مصدر جديد مع الموقع src/main/resources ، ثم أنشئ مجلد META-INF/services الخاص بك هناك واسقط في ملف FQCN الخاص بك. هذا يجب نسخها في ملف الجرة تلقائيا. إذن سيكون لديك:

Project
| src
| | main
|   | Java
|     | [your source code]
|   | resources
|     | META-INF
|       | services
|         | [your service files]

تجدر الإشارة إلى أن هذا ينطبق على مشاريع Gradle مع مجموعات المصدر الافتراضية أيضًا.

99
Brian

بشكل افتراضي ، يبحث Maven عن الموارد على:

src/main/resources

لذلك وضعه في

src/main/resources/META-INF/services
17
Puce

بدلاً من ذلك ، إذا كان مشروعك لا يستخدم بنية دليل قياسية (أو ترغب ببساطة في الحصول على أدلة موارد بديلة) ، فيمكنك تحديد أدلة الموارد ملف POM يدويًا.

على سبيل المثال ، إذا كان META-INF/services الخاص بك موجودًا في مجلد يسمى resources والذي يقع في جذر دليل مشروعك ، فيمكنك تحديده كما يلي:

<project>
...
  <build>
    ...
    <resources>
      <resource>
        <directory>resources</directory>
      </resource>
    </resources>
    ...
  </build>
  ...
</project>

يمكنك استخدام هذا لتحديد عدة أدلة عن طريق إضافة عناصر <resource> متعددة.

13
Robert Bartlett-Schneider