Создание папки META-INF/services в Eclipse

Я пытаюсь создать расширяемое приложение на Java и решил использовать SPI. В соответствии с этим учебник, я следую, я должен создать конкретный файл в META-INF/services в моей банке, но не знаю, как это сделать. Я знаю, как создать банку с META-INF, но не могу найти способ создания папки services и определенного файла в этой папке. (Я использую Eclipse)

Спасибо за вашу помощь.

Ответ 1

Поскольку учебное пособие инструктирует его вручную, вместо использования ant или maven или других инструментов сборки, просто создайте папку с именем META-INF на корневом уровне с подпапкой с именем служб и файл под названием MANIFEST.MF.

Я не уверен, как вы планируете выполнять свой файл jar, теперь вы можете просто поместить эту строку в свой MANIFEST.MF:

Manifest-Version: 1.0

Для вашей папки служб вам необходимо создать файл с именем com.example.dictionary.spi.Dictionary со следующим содержимым строки, как указано в учебнике: -

com.example.dictionary.GeneralDictionary

FYI - META-INF - это внутренний метакаталог Java. Как правило, вы хотите полагаться на свой упаковочный инструмент, такой как ant или maven, чтобы создавать содержимое папки META-INF, а не делать это самостоятельно.

Вы можете увидеть подробности о содержании папки META-INF здесь: -

The following files/directories in the META-INF directory are recognized and interpreted by the Java 2 Platform to configure applications, extensions, class loaders and services:

    MANIFEST.MF

The manifest file that is used to define extension and package related data.

    INDEX.LIST

This file is generated by the new "-i" option of the jar tool, which contains location information for packages defined in an application or extension.  It is part of the JarIndex implementation and used by class loaders to speed up their class loading process.

    x.SF

The signature file for the JAR file.  'x' stands for the base file name.

    x.DSA

The signature block file associated with the signature file with the same base file name. This file stores the digital signature of the corresponding signature file.

    services/

Ответ 2

Предполагая, что вы создаете jar файл с Apache Ant, вам нужно добавить набор файлов metainf или, еще лучше, использовать директиву служб таким образом

<jar jarfile="pinky.jar">
  <fileset dir="build/classes"/>
  <service type="javax.script.ScriptEngineFactory"
           provider="org.acme.PinkyLanguage"/>
</jar>

Если вы не используете apache Ant, вам нужно добавить файл в свою банку

jar -uf jarfile.jar META-INF/services/name.of.general.service

который содержит имя реализации службы

com.mycorp.services.Fooservice

Если вы создаете JAR файл, используя Eclipse "Runnable Jar file export" в проекте, выберите "сохранить как ANT script", а затем измените ANT script на пакет в сервисах, как описано выше.