0

問題は次のとおりです。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に対してのみ機能します...

では、すべてをシームレスに機能させるには、どのプラグインが必要でしょうか? どのように構成しますか?

4

1 に答える 1

1

アセンブリプラグインを検討しましたか? 私はそれがかなり強力だと思います。 http://maven.apache.org/plugins/maven-assembly-plugin/

例: https://gist.github.com/wytten/5782232

于 2013-06-14T14:22:12.140 に答える