0

问题如下:我需要在其中生成文件,META-INF以便使用ServiceLoader进行注册。FWIW,这是 Maven 3.0.4。pom.xml 文件的完整链接在这里

为了生成这些文件,我使用这个插件如下:

<properties>
    <serviceName>com.github.fge.msgsimple.serviceloader.MessageBundleProvider</serviceName>
</properties>
<!-- .... -->
        <plugin>
            <groupId>eu.somatik.serviceloader-maven-plugin</groupId>
            <artifactId>serviceloader-maven-plugin</artifactId>
            <version>1.0.2</version>
            <configuration>
                <services>
                    <param>${serviceName}</param>
                </services>
            </configuration>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

但是,生成的文件 ( META-INF/services/xxxx) 无法进入生成的 jar,所以我不得不求助于这个(你的眼睛可能会流血):

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <target>
                            <property name="jarname"
                                value="${project.name}-${project.version}.jar"/>
                            <property name="victim"
                                value="${project.build.directory}/${jarname}"/>
                            <property name="serviceFile"
                                value="${project.build.directory}/classes/META-INF/services/${serviceName}"/>
                            <echo>${victim}</echo>
                            <echo>${serviceFile}</echo>
                            <jar destfile="${victim}" update="true">
                                <zipfileset file="${serviceFile}"
                                    prefix="META-INF/services/"/>
                            </jar>
                        </target>
                    </configuration>
                </execution>
            </executions>
        </plugin>

我知道阴影插件。我已经尝试过,与它战斗了几个小时,完全没有成功。它只是不包含该文件。以上是唯一适合我的解决方案。

但这种解决方案是不可持续的。我还想生成带有依赖项的jar,在这种情况下需要附加服务文件;并且上面的解决方案仅适用于没有依赖关系的罐子......

那么,您需要什么插件才能使整个过程无缝运行?你如何配置它?

4

1 回答 1

1

您是否考虑过组装插件?我觉得它非常强大。 http://maven.apache.org/plugins/maven-assembly-plugin/

一个例子: https ://gist.github.com/wytten/5782232

于 2013-06-14T14:22:12.140 回答