问题如下:我需要在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 ...
那么,你需要什么插件才能使整个事情无缝地工作?你如何配置它?