I am trying to create an extensible app in Java and chose to use SPI. According to this tutorial I am following, I am supposed to create a specific file in META-INF/services
in my jar, but don't know how.
I know how to create jar with META-INF
, but can't find a way how to create the services
folder and particular file in this folder. (I am using Eclipse)
Thanks for your help.
META-INF is a directory used by java jars to store meta information about themeselves.
Basically it has to be in your classpath(under /META-INF/ ). You can manually enable it in eclipse by configuring properties. If your project is maven based, then it should be automatically picked from /src/main/resources/META-INF/ folder (provided entities are under the same hood).
A service provider is identified by placing a provider-configuration file in the resource directory META-INF/services. The file's name is the fully-qualified binary name of the service's type. The file contains a list of fully-qualified binary names of concrete provider classes, one per line.
Click 'Add Folder', click 'Create New Folder', type 'src/main/resources/META-INF', click 'Finish', click 'OK', Click 'Apply and Close', In the source folder '~/src/main/java', create a new Package 'hello' and a new Class file 'Application.
Since the tutorial is instructing to create it manually rather than using ant or maven or other build tools then just create a folder named META-INF at the root level with a sub-folder named services and a file called MANIFEST.MF.
I am not sure how you plan to execute your jar file, for now you can just put this one line in your MANIFEST.MF
:
Manifest-Version: 1.0
For your services folder, you need to create a file named com.example.dictionary.spi.Dictionary
with the following one line content as mentioned in the tutorial:-
com.example.dictionary.GeneralDictionary
FYI - META-INF is an internal Java meta directory. Generally, you want to rely on your packaging tool such as ant or maven to build the content of META-INF folder rather than doing it by yourself.
You can see the details on the content of META-INF folder here:-
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/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With