問題は次のとおりです。ServiceLoaderMETA-INF
を使用した登録が機能するように、ファイルを生成する必要があります。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 を生成したいと考えています。この場合、サービス ファイルを追加する必要があります。上記のソリューションは、依存関係のないjarに対してのみ機能します...
では、すべてをシームレスに機能させるには、どのプラグインが必要でしょうか? どのように構成しますか?