Armin Beda
Armin Beda

Reputation: 109

ServiceLoader and META-INF/services generator between different modules in maven?

I would like to use service ServiceLoader between diferrent modules in a maven Project. I have a parent module called iMage. In the parent module there is a module with a name jmjrst.main and it has a public abstract class called JmjrstPlugin.

Then there is another module called prizm-plugin with the following class:

public class HelloWorldPlugin extends JmjrstPlugin{ ... }

I added jmjrst.main as a dependency to prizm-plugin and vica-versa as well.

In order to use ServiceLoader I wanted to use META-INF/services generator. I added the following line to the pom.xml of prizm-plugin:

<dependency>
  <groupId>org.kohsuke.metainf-services</groupId>
  <artifactId>metainf-services</artifactId>
  <version>1.1</version>
  <optional>true</optional>
</dependency>

And the class HelloWorldPlugin starts like that:

@MetaInfServices(JmjrstPlugin.class) 
public class HelloWorldPlugin extends JmjrstPlugin{ ... }

On the website on META-INF/services generator goes: "When you use javac in JavaSE6, META-INF/services/* files are generated automatically. No additional compiler switches are necessary. This library handles incremental compilation correctly, too."

At my case nothing is generated. Can somebody help me with that?

Upvotes: 3

Views: 1806

Answers (1)

D-Dᴙum
D-Dᴙum

Reputation: 7890

From the code snippet of your class HelloWorldPlugin it is not clear which interface is 'the contract'. And in the link that you gave:

If you have multiple interfaces and/or base type, the library cannot infer the contract type. In such a case, specify the contract type explicitly by giving it to @MetaInfServices ..

So first of all you have to be sure which contract you wish to fulfill and if the parent class(es) implement several then you'll need to explicitly state which one in the @MetaInfServices annotation.

That's the first thing to check I think.

Upvotes: 0

Related Questions