creating META-INF/services folder in Eclipse
Asked Answered
G

2

12

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.

Gauffer answered 16/6, 2011 at 18:25 Comment(0)
K
12

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/
Kowatch answered 16/6, 2011 at 18:27 Comment(1)
Thanks, simple and did the jobGauffer
I
5

Assuming you are building your jar file with Apache's Ant, you need to add a metainf fileset, or better yet, use a services directive like so

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

If you don't use apache's Ant, then you need to add a file to your jar

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

which contains the name of the service's implementation

com.mycorp.services.Fooservice

If you are generating the JAR file using Eclipse's "Runnable Jar file export" under the project, select "save as ANT script" and then modify the ant script to pack in the services as described above.

Inoperable answered 16/6, 2011 at 18:29 Comment(5)
He is following the tutorial which is asking him to create it by hand.Kowatch
Well, so far I have been building the jar using the wizard in Eclipse.Gauffer
@Gauffer - once you start building enterprise applications you would want to move to using a build tool like ant or maven. However, it is fine to use eclipse to build jars to start out with.Kowatch
Thank you very much. Even though I am marking CoolBeans's answer as accepted, because it's easier for me, yours was definitely helping tooGauffer
@tom, if you want to use the jar exporter, use the runnable jar file export, it has an option to save the export as an ant build file. Save it and then edit it to your heart's content.Inoperable

© 2022 - 2024 — McMap. All rights reserved.