我有一个有点难以解释的问题,但我会尽力解释。如果您有任何不明白或需要更多信息,请随时询问。 :)
我有一个使用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 中首先提到的项目。
你们中有人有类似的经历或者可以帮助我解决这个问题吗?
提前致谢, 洛里斯
最佳答案
我发现了问题并解决了!!! 问题是我的每个插件都包含一个名为“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>
关于java - Maven 和 java 插件框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32907654/