当前位置: 首页 > 知识库问答 >
问题:

用Maven创建META-INF/Services文件

公孙茂学
2023-03-14

有没有一种方法可以用Maven在Meta-INF/services中创建自定义服务文件?这就是您使用Ant的方法:https://ant.apache.org/manual/tasks/jar.html

我知道在我的源代码中创建一个resources/meta-inf/并放置我想要的任何服务文件是可能的。然后,Maven会自动将这些文件拉到我的JAR中。这不能解决我的问题。

在我的源代码中有多个版本的服务文件,让Maven排除那些我不需要的文件,也不能解决我的问题。这是因为服务文件需要是一个特定的名称;文件的多个版本将防止这种情况。

总结:有没有一种方法可以用Maven创建服务文件(meta-inf/services)的内容?

谢谢!

共有1个答案

翁钧
2023-03-14

如果您可以创建一个数量合理的低的此类服务文件,那么您可以将它们存储在项目中的一个单独路径中。例如:

然后,您可以有选择地包含具有以下pom.xml的文件(还有一个pom.xml功能强大但冗长的示例):

<properties>
    <service.declaration.dir>src/serviceManifests</service.declaration.dir>
    <service.files.path>META-INF/services</service.files.path>
</properties>

<profiles>
    <profile>
        <id>foo</id>
        <build>
            <resources>
                <resource>
                    <directory>${service.declaration.dir}</directory>
                    <includes>
                        <include>${service.files.path}/foo</include>
                    </includes>
                </resource>
            </resources>
        </build>
    </profile>
    <profile>
        <id>bar</id>
        <build>
            <resources>
                <resource>
                    <directory>${service.declaration.dir}</directory>
                    <includes>
                        <include>${service.files.path}/bar</include>
                    </includes>
                </resource>
            </resources>
        </build>
    </profile>
</profiles>

要包括这两个文件,您将运行:

mvn clean package -P foo -P bar

要仅包含foo文件,您将运行:

mvn clean package -P foo
 类似资料:
  • 我的CharsetProvider的类是在文件中指定的,该文件位于中,所有GET都正常加载并按预期工作。 然而,现在我也在android上使用lib,但是charset没有加载到android-app中。 我如何整合我的字符集,使它可以像预期的那样在一个Android应用程序中使用? 目前我正在做这样的变通: 这是可行的,但在我看来是无效的,因为每次我尝试用自己的charset进行这样的解码时,都

  • 因此,在我的主程序中,我运行以下内容。 它总是返回false,这意味着它没有找到'dummydevice' 在我的eclipse项目中,我在'src'处创建了一个名为META-INF的文件夹,在它下面创建了一个名为'services'的子文件夹。 我做对了吗?我看到的每一个关于SPI的例子都是关于加载JAR的。我不是在加载一个JAR,我是想在同一个项目中运行一个类。这个方法只适用于装入罐子吗?我希

  • 我正在Eclipse中处理一个Java项目,该项目是使用Maven构建的。我使用的是一个旧项目中的一些循环代码,其中一个类在JAR的文件夹中查找一个具有特定名称的文件,然后解析该文件的文本。在这个特定的示例中,它查找一个具有Java接口名称的文件,然后从文件内部获取实现的类名。

  • 如果我想使用jar实用程序创建一个没有META-INF废话的jar文件,我可以传递-m开关,它将: 我已经有了创建jar文件的配置,而且我不想再搞砸另一个插件...

  • 问题内容: 我正在使用Eclipse构建Java项目,该项目是使用Maven构建的。我使用的是旧项目中的一些再生代码,这些类之一在JAR文件夹中查找具有特定名称的文件,然后解析该文件的文本。在此特定示例中,它将查找具有Java接口名称的文件,然后从文件内部获取实现的类名称。 因此,基本上我想做的是 在JAR的“ META-INF / services”文件夹中包含一个文件名(X)和一行文本(Y)的