我有我不知道如何正确地解决它的问题。 我开发加载这些插件动态上启动一个程序的插件。 一切工作得很好,只要我通常只做使用像已使用由主程序阿帕奇百科全书依赖了。
现在,我试图玩弄谷歌吉斯和主要程序没有在类路径的包,所以在课程开始了NoClassDefFoundError错误。 我用谷歌一会儿就找到解决我的问题,但我想出了用一个超级罐子的唯一的事情。 但问题是,我有依赖关系,我使用,我不想拉他们在我的插件,我会最终不得不管理所有这些其他插件。 它甚至可能发生,我在类路径中两种不同的实现,因为我失去了联系,并没有更新次要版本。 不幸的是,通常没有接口,用于其他的插件,所以我不能采取英寸
长文本,短的问题:是否有可能告诉Maven来只拉吉斯在该文件中,或者甚至更好,有一个更清洁的解决这个问题? 也许我做错过什么,在整个过程中的关键? 任何帮助表示赞赏。
我刚刚找到一个可行的解决方案。 用窗帘插件这样产生所需的结果:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<include>com.google.inject:guice</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
作为主程序的类路径不JAVE吉斯罐子,父类加载器并不加载吉斯包。 如果子类加载器加载的吉斯罐子,然后主程序不会有任何知识。 现在,来解决这个问题,你可以做以下任意一种:
- 移动吉斯罐子主程序的类路径
- 萌的其使用吉斯罐子子类加载器代码(插件)的部分