问题如下:我需要在其中生成文件,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,在这种情况下需要附加服务文件;并且上面的解决方案仅适用于没有依赖关系的罐子......
那么,您需要什么插件才能使整个过程无缝运行?你如何配置它?