12

我正在尝试用 Java 创建一个可扩展的应用程序并选择使用 SPI。根据我正在关注的本教程,我应该META-INF/services在我的 jar 中创建一个特定的文件,但不知道如何。我知道如何使用 jar 创建 jar META-INF,但找不到如何services在此文件夹中创建文件夹和特定文件的方法。(我正在使用 Eclipse)

谢谢你的帮助。

4

2 回答 2

12

由于本教程指示手动创建它而不是使用 ant 或 maven 或其他构建工具,因此只需在根级别创建一个名为META-INF的文件夹,其中包含一个名为services的子文件夹和一个名为MANIFEST.MF的文件。

我不确定你打算如何执行你的 jar 文件,现在你可以把这一行放在你的MANIFEST.MF

Manifest-Version: 1.0

对于您的服务文件夹,您需要创建一个文件,该文件命名com.example.dictionary.spi.Dictionary为教程中提到的以下一行内容:-

com.example.dictionary.GeneralDictionary

仅供参考 - 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/
于 2011-06-16T18:27:59.470 回答
5

假设您正在使用 Apache 的 Ant 构建您的 jar 文件,您需要添加一个 metainf 文件集,或者更好的是,使用类似这样的服务指令

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

如果你不使用 apache 的 Ant,那么你需要在你的 jar 中添加一个文件

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

其中包含服务实现的名称

com.mycorp.services.Fooservice

如果您在项目下使用 Eclipse 的“Runnable Jar 文件导出”生成 JAR 文件,请选择“另存为 ANT 脚本”,然后修改 ant 脚本以打包上述服务。

于 2011-06-16T18:29:59.083 回答