我正在Eclipse中开发一个Java项目,它是使用Maven构建的。我正在使用旧项目中的一些回收代码,其中一个类在具有特定名称的JAR的“META-INF / services”文件夹中查找文件,然后解析该文件的文本。在此特定示例中,它查找具有Java接口名称的文件,然后从文件内部获取实现的类名。
所以基本上我要做的是在JAR的“META-INF / services”文件夹中包含一个文件名(X)和一行文字(Y)的文件。我猜这应该是使用Maven完成的,可能是通过在POM文件中指定一个属性,但我的研究没有发现任何东西。我知道你不应该硬编码或手动输入任何META文件,所以我不知道该怎么做。
提前致谢。
答案 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>
元素来指定多个目录。