如何使用Maven在JAR的“META-INF / services”文件夹中包含配置文件

时间:2013-07-08 16:32:41

标签: java eclipse maven pom.xml

我正在Eclipse中开发一个Java项目,它是使用Maven构建的。我正在使用旧项目中的一些回收代码,其中一个类在具有特定名称的JAR的“META-INF / services”文件夹中查找文件,然后解析该文件的文本。在此特定示例中,它查找具有Java接口名称的文件,然后从文件内部获取实现的类名。

所以基本上我要做的是在JAR的“META-INF / services”文件夹中包含一个文件名(X)和一行文字(Y)的文件。我猜这应该是使用Maven完成的,可能是通过在POM文件中指定一个属性,但我的研究没有发现任何东西。我知道你不应该硬编码或手动输入任何META文件,所以我不知道该怎么做。

提前致谢。

3 个答案:

答案 0 :(得分:99)

位置为src/main/resources

Create a new source folder,然后在其中创建您的META-INF/services文件夹并放入您的FQCN文件。这应该自动将它们复制到jar文件中。所以你会:

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

值得注意的是,这也适用于具有默认源集的Gradle项目。

答案 1 :(得分:16)

默认情况下,Maven会在以下位置查找资源:

src/main/resources

所以把它放在

src/main/resources/META-INF/services

答案 2 :(得分:13)

或者,如果您的项目不使用标准目录结构(或者您只是希望拥有备用资源目录),则可以手动指定resource directories POM文件。

例如,如果您的META-INF/services位于名为resources的文件夹中,该文件夹位于项目目录的根目录中,则可以按如下方式指定:

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

您可以通过添加多个<resource>元素来指定多个目录。