如何在这里摆脱maven-antrun-plugin?

时间:2013-06-14 09:18:38

标签: maven maven-3

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

为了生成这些文件,我使用this plugin,如下所示:

<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,在这种情况下需要附加服务文件;以上解决方案仅适用于没有依赖关系的jar ...

那么,你需要什么插件才能使整个事情无缝地工作?你如何配置它?

1 个答案:

答案 0 :(得分:1)

您是否考虑过汇编插件?我发现它非常强大。 http://maven.apache.org/plugins/maven-assembly-plugin/

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