仅部署了一些与Maven的依赖关系(Deploying only some of the depen

2019-10-18 19:58发布

我有我不知道如何正确地解决它的问题。 我开发加载这些插件动态上启动一个程序的插件。 一切工作得很好,只要我通常只做使用像已使用由主程序阿帕奇百科全书依赖了。

现在,我试图玩弄谷歌吉斯和主要程序没有在类路径的包,所以在课程开始了NoClassDefFoundError错误。 我用谷歌一会儿就找到解决我的问题,但我想出了用一个超级罐子的唯一的事情。 但问题是,我有依赖关系,我使用,我不想拉他们在我的插件,我会最终不得不管理所有这些其他插件。 它甚至可能发生,我在类路径中两种不同的实现,因为我失去了联系,并没有更新次要版本。 不幸的是,通常没有接口,用于其他的插件,所以我不能采取英寸

长文本,短的问题:是否有可能告诉Maven来只拉吉斯在该文件中,或者甚至更好,有一个更清洁的解决这个问题? 也许我做错过什么,在整个过程中的关键? 任何帮助表示赞赏。

Answer 1:

我刚刚找到一个可行的解决方案。 用窗帘插件这样产生所需的结果:

<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>


Answer 2:

作为主程序的类路径不JAVE吉斯罐子,父类加载器并不加载吉斯包。 如果子类加载器加载的吉斯罐子,然后主程序不会有任何知识。 现在,来解决这个问题,你可以做以下任意一种:

  • 移动吉斯罐子主程序的类路径
  • 萌的其使用吉斯罐子子类加载器代码(插件)的部分


文章来源: Deploying only some of the dependencies with maven