Service Loader Processor

Service Loader Processor is a Java Processor to generate a provider-configuration file

License

License

GroupId

GroupId

com.github.marcosemiao
ArtifactId

ArtifactId

serviceloader-processor
Last Version

Last Version

0.0.6
Release Date

Release Date

Type

Type

jar
Description

Description

Service Loader Processor
Service Loader Processor is a Java Processor to generate a provider-configuration file
Project URL

Project URL

https://github.com/marcosemiao/serviceloader-processor
Source Code Management

Source Code Management

https://github.com/marcosemiao/serviceloader-processor

Download serviceloader-processor

How to add to project

<!-- https://jarcasting.com/artifacts/com.github.marcosemiao/serviceloader-processor/ -->
<dependency>
    <groupId>com.github.marcosemiao</groupId>
    <artifactId>serviceloader-processor</artifactId>
    <version>0.0.6</version>
</dependency>
// https://jarcasting.com/artifacts/com.github.marcosemiao/serviceloader-processor/
implementation 'com.github.marcosemiao:serviceloader-processor:0.0.6'
// https://jarcasting.com/artifacts/com.github.marcosemiao/serviceloader-processor/
implementation ("com.github.marcosemiao:serviceloader-processor:0.0.6")
'com.github.marcosemiao:serviceloader-processor:jar:0.0.6'
<dependency org="com.github.marcosemiao" name="serviceloader-processor" rev="0.0.6">
  <artifact name="serviceloader-processor" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.github.marcosemiao', module='serviceloader-processor', version='0.0.6')
)
libraryDependencies += "com.github.marcosemiao" % "serviceloader-processor" % "0.0.6"
[com.github.marcosemiao/serviceloader-processor "0.0.6"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

Service Loader Processor

Fonctionnalités générales

Cette librairie permet de générer pour un fournisseur de service, un fichier de configuration dans le répertoire "META-INF/services" à partir d'une annotation.

  • Facile d'utilisation, il suffit de rajouter la dépendance Maven avec le scope "provided" dans votre application.
  • Disponible sur le repository central de Maven.
  • Compatible à partir de la version Java 6.

Utilisation rapide

  • Ajouter la dépendance dans votre projet :
<dependency>
	<groupId>com.github.marcosemiao</groupId>
	<artifactId>serviceloader-processor</artifactId>
    <scope>provided</scope>
    <version>0.0.6</version>
</dependency>
  • Dans votre implémentation rajouter l'annotation "ServiceLoader" à la compilation le fichier de configuration sera automatiquement crée dans le répertoire "META-INF/services".

Exemple :

Avec une classe "Slf4jMojoLogger" qui implémente une interface "MojoLogger"

il suffit de rajouter l'annotation "ServiceLoader" sur cette classe.

@ServiceLoader
public class Slf4jMojoLogger implements MojoLogger {

    private final static StaticLoggerBinder staticLoggerBinder = StaticLoggerBinder.getSingleton();

    @Override
    public void setMavenLogger(final Log log) {
	staticLoggerBinder.setMavenLog(log);
    }
}

A la compilation, un message previent de la détection d'une implémentation :

[INFO] Service Provider detected
[INFO] ************************************
[INFO] Interface : fr.ms.maven.plugin.MojoLogger
[INFO]                 -> fr.ms.maven.slf4j.impl.Slf4jMojoLogger

A la suite de cela le fichier "META-INF/services/fr.ms.maven.plugin.MojoLogger" est crée avec le contenu suivant :

fr.ms.maven.slf4j.impl.Slf4jMojoLogger

Utilisation avec plusieurs interfaces

Prenons le cas ou votre implémentation utilise plusieurs interfaces.

Re-prenons l'exemple précédent en rajoutant une interface :

@ServiceLoader
public class Slf4jMojoLogger implements MojoLogger, Dummy {

    private final static StaticLoggerBinder staticLoggerBinder = StaticLoggerBinder.getSingleton();

    @Override
    public void setMavenLogger(final Log log) {
	staticLoggerBinder.setMavenLog(log);
    }
}

A la compilation, un message d'erreur previent de l'utilisation de plusieurs interfaces :

[ERROR] fr.ms.maven.slf4j.impl.Slf4jMojoLogger implements many interfaces, please define the interface in the ServiceProvider annotation

Il est donc nécessaire de spécifier la ou les interfaces à utiliser

@ServiceLoader(value = { MojoLogger.class, Dummy.class })
public class Slf4jMojoLogger implements MojoLogger, Serializable {

    private final static StaticLoggerBinder staticLoggerBinder = StaticLoggerBinder.getSingleton();

    @Override
    public void setMavenLogger(final Log log) {
	staticLoggerBinder.setMavenLog(log);
    }
}

A la compilation, un message previent de la détection de plusieurs implémentations :

[INFO] Service Provider detected
[INFO] ************************************
[INFO] Interface : fr.ms.maven.plugin.MojoLogger
[INFO]                 -> fr.ms.maven.slf4j.impl.Slf4jMojoLogger
[INFO] ************************************
[INFO] Interface : fr.ms.maven.plugin.Dummy
[INFO]                 -> fr.ms.maven.slf4j.impl.Slf4jMojoLogger

A la suite de cela deux fichiers sont crées : "META-INF/services/fr.ms.maven.plugin.MojoLogger" est crée avec le contenu suivant :

fr.ms.maven.slf4j.impl.Slf4jMojoLogger

et

"META-INF/services/fr.ms.maven.plugin.Dummy" est crée avec le contenu suivant :

fr.ms.maven.slf4j.impl.Slf4jMojoLogger

PS : Vous pouvez spécifier des super classes à la place des interfaces

Versions

Version
0.0.6
0.0.2
0.0.1