web-dev-qa-db-fra.com

Comment inclure un fichier de configuration dans le dossier "META-INF / services" d'un fichier JAR utilisant Maven

Je travaille sur un projet Java dans Eclipse, construit à l'aide de Maven. J'utilise du code recyclé provenant d'un projet plus ancien et l'une de ces classes recherche un fichier dans le " "META-INF/services" du fichier JAR avec un nom particulier, puis analyse le texte de ce fichier. Dans cet exemple particulier, il recherche un fichier portant le nom d’une Java interface, puis saisit le nom de classe de l'implémentation à l'intérieur du fichier.

Donc, en gros, j'essaie de inclure un fichier dans le dossier "META-INF/services" du fichier JAR avec un nom de fichier (X) et une ligne de texte (Y). Je suppose que cela devrait être fait en utilisant Maven, peut-être en spécifiant un attribut dans le fichier POM, mais mes recherches n’ont rien révélé. Je sais que vous n'êtes pas censé coder en dur ni saisir manuellement les fichiers META. Je ne sais donc pas quoi faire ici.

Merci d'avance.

65
Matt Vukas

Créer un nouveau dossier source avec l'emplacement src/main/resources, puis créez votre META-INF/services dossier et déposez-le dans votre fichier FQCN. Cela devrait les copier automatiquement dans le fichier jar. Donc vous aurez:

Project
| src
| | main
|   | Java
|     | [your source code]
|   | resources
|     | META-INF
|       | services
|         | [your service files]

Il convient de noter que cela s'applique également aux projets Gradle avec les jeux de sources par défaut.

102
Brian

Par défaut, Maven recherche des ressources sur:

src/main/resources

Alors mettez-le à

src/main/resources/META-INF/services
17
Puce

Si votre projet n'utilise pas de structure de répertoire standard (ou si vous souhaitez simplement disposer de répertoires de ressources alternatifs), vous pouvez spécifier répertoires de ressources manuellement le fichier POM.

Par exemple, si votre META-INF/services est situé dans un dossier appelé resources qui se trouve à la racine du répertoire de votre projet, vous pouvez le spécifier comme suit:

<project>
...
  <build>
    ...
    <resources>
      <resource>
        <directory>resources</directory>
      </resource>
    </resources>
    ...
  </build>
  ...
</project>

Vous pouvez l’utiliser pour spécifier plusieurs répertoires en ajoutant plusieurs <resource> éléments.