使用Maven创建META-INF / services文件

时间:2017-02-05 19:16:06

标签: java maven maven-3

有没有办法在Maven中使用META-INF / services创建自定义服务文件?这就是使用Ant:https://ant.apache.org/manual/Tasks/jar.html

的方法

我知道可以在我的源代码中简单地创建资源/ META-INF /并在那里放置我想要的任何服务文件。然后,Maven会自动将这些文件拉入我的JAR。这不能解决我的问题。

我的服务文件的内容会根据我所构建的JAR的类型而改变,因此我无法在源代码文件夹中创建它。

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

总结:有没有办法用Maven创建服务文件的内容(META-INF / services)?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您可以创建相当少数量的此类服务文件,则可以将它们存储在项目的单独路径中。例如:

Example directory structure

然后你可以选择性地包含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