【问题标题】:Maven and the java plugin frameworkMaven 和 java 插件框架
【发布时间】:2015-10-05 17:29:23
【问题描述】:

我有一个有点难以解释的问题,但我会尽力做到这一点。如果您不了解任何内容或需要更多信息,请随时提问。 :)

我有一个使用 java 插件框架的 java 项目。这意味着我正在我的项目的类路径中搜索具有特定结构的项目。 我有两个项目具有这种所需的结构,并作为依赖项包含在主项目 pom.xml 中:

<dependency>
    <groupId>package</groupId>
    <artifactId>One</artifactId>
    <version>1.0</version>
</dependency>
<dependency>
    <groupId>package</groupId>
    <artifactId>Two</artifactId>
    <version>1.0</version>
</dependency>

我正在通过 ServiceLoader 检索可用的类:

loader = ServiceLoader.load(ISomeInterface.class);
loader.iterator();

我的问题是,ServiceLoader.load 调用只传递我的 pom.xml 中首先提到的项目。

你们有没有人有类似的经历或者可以帮助我解决这个问题?

提前致谢, 洛里斯

【问题讨论】:

标签: java maven plugins module dependencies


【解决方案1】:

我发现问题并解决了!!! 问题是我的每个插件都包含一个名为“META-INF/full.qualified.interface”的文件,其内容为“full.qualified.interfaceimplementation”。 Maven 只打包了第一个项目的文件,而不是合并每个项目的文件内容。 所以你需要做的就是配置maven来合并它使用shade插件找到的所有“META-INF/full.qualified.interface”文件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 2010-10-26
    • 2010-12-09
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    相关资源
    最近更新 更多