Java/Maven:如何在编译时从着色JAR中删除内容?

Java/Maven:如何在编译时从着色JAR中删除内容?,maven,maven-shade-plugin,Maven,Maven Shade Plugin,在我的项目中,我正在重用一个基于maven的开源组件,该组件在uber jar组件中包含一系列着色(例如,使用maven着色插件)直接和可传递的依赖项。不幸的是,其中一些依赖项与我自己的项目所具有的依赖项冲突。具体地说,组件的依赖关系可传递地包括ServletAPI2.x,而我的项目中需要3.x,而且它们似乎在同一名称空间中。组件的功能实际上不需要组件的顶级依赖项(拉入ServletAPI(lucene demo)),因此如果可能的话,我很乐意删除它。我的项目是由Gradle完成的 处理这种情况

在我的项目中,我正在重用一个基于maven的开源组件,该组件在uber jar组件中包含一系列着色(例如,使用maven着色插件)直接和可传递的依赖项。不幸的是,其中一些依赖项与我自己的项目所具有的依赖项冲突。具体地说,组件的依赖关系可传递地包括ServletAPI2.x,而我的项目中需要3.x,而且它们似乎在同一名称空间中。组件的功能实际上不需要组件的顶级依赖项(拉入ServletAPI(lucene demo)),因此如果可能的话,我很乐意删除它。我的项目是由Gradle完成的

处理这种情况的推荐方法是什么?当我构建自己的项目时,是否有任何方法可以从重用的uber jar中删除有问题的依赖项?或者我应该自己重新构建重用的组件,排除麻烦的依赖关系吗?如果是这样的话,这可以自动完成吗,这样我就不需要维护自己的开源组件分支了?该组件目前托管在GitHub中,并通过Maven Central发布


(正如你所理解的,我对Maven和Gradle都是初学者,所以不要担心会让事情变得简单)。

也许你可以用Maven依赖插件复制这个依赖,用Maven ant插件使用“zipfileset”ant任务()从构建中的依赖jar中删除内容。您能列出您在项目中使用的组件吗?@watery:我打算重用的包,通过着色包含将lucene demo(和servlet api 2.x)的jar拉入其中,它是语义向量,来自。我想使用Spring Boot(Spring Boot starter web)部署我的代码,据我所知,这需要使用更新的servlet api版本。我无法复制您的问题(我只是尝试了一个空的webapp项目,我可能遗漏了一些东西),但您可以试着看一看:它应该让您的依赖项从特定的应用程序中排除dependency@watery:如果依赖jar包含其所有依赖项的内容(类和资源),这将没有帮助-如果它是正常打包的,您可以使用您提到的依赖项排除。