Как включить конфигурационный файл в папку "META-INF / services" JAR с помощью Maven


Я работаю над проектом Java в Eclipse, который построен с использованием Maven. Я использую некоторый переработанный код из более старого проекта, и один из этих классов ищет файл в папке "META-INF/services" JAR с определенным именем, а затем анализирует текст этого файла. В этом конкретном примере он ищет файл с именем интерфейса Java, а затем захватывает имя класса реализации из файла.

Так что в основном то, что я пытаюсь сделать, это включите файл в папку "META-INF / services" JAR с именем файла (X) и одной строкой текста (Y). Я предполагаю, что это должно быть сделано с помощью Maven, возможно, указав атрибут в файле POM, но мое исследование ничего не показало. Я знаю, что вы не должны жестко кодировать или вручную вводить какие-либо мета-файлы, поэтому я не уверен, что здесь делать.

спасибо заранее.

3 52

3 ответа:

создать новую исходную папку с местоположением src/main/resources, затем создать свой META-INF/services папка там и падение в вашем файле FQCN. Это должно автоматически скопировать их в файл jar. Так что вы будете иметь:

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

стоит отметить, что это относится и к проектам Gradle с исходными наборами по умолчанию.

по умолчанию Maven ищет ресурсы по адресу:

src/main/resources

Так что поставьте его на

src/main/resources/META-INF/services

кроме того, если ваш проект не использует стандартную структуру каталогов (или вы просто хотите иметь альтернативные каталоги ресурсов), вы можете указать каталоги ресурсов вручную файл POM.

например, если ваш META-INF/services находится в папке с именем resources который находится в корневом каталоге вашего проекта, может указать его следующим образом:

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

вы можете использовать это, чтобы указать несколько каталогов, добавив несколько <resource> элементы.