如何从 maven 项目中自动排除未使用的 jar 文件?

Posted

技术标签:

【中文标题】如何从 maven 项目中自动排除未使用的 jar 文件?【英文标题】:How to automatically exclude not-used jar files from a maven project? 【发布时间】:2016-08-21 17:41:36 【问题描述】:

如果我想编写一个程序来自动从 maven 项目中排除未使用的 jar 文件(无论我将使用哪种编程语言),我应该如何开始?

目前,我有一个愚蠢的想法。除了声明的jar文件,每次从上往下排除依赖树的一个节点,然后编译运行项目,看是否可以排除这个jar文件。

我找不到任何其他更好的想法,我需要帮助。无论你想到什么,请与我分享。如果您知道其他人以前这样做过,请发布源代码的链接或与我分享它的想法。谢谢!!!!

对了,如果我想写一个程序自动解决依赖冲突问题怎么办?这可能吗?我知道这样的问题一直困扰着 java 开发者。

【问题讨论】:

maven.apache.org/plugins/maven-dependency-plugin/… Is there a simple way to remove unused dependencies from a maven pom.xml?的可能重复 不完全是。我知道存在一个可能有帮助的依赖插件,但是必须手动运行命令来决定应该排除哪个依赖。但是,我想为我编写一个自动执行此操作的程序。 等待java 9,我相信“Java平台模块系统”就是为了做这种事情而设计的,而且更好。 【参考方案1】:

这样的方法的问题在于,即使一切都可以正确编译,您在运行时仍然缺少资源。

如果您在 Classloader 的帮助下加载类和东西,或者如果您使用反射来访问类和方法,则可能是这种情况。 如果您查看除 Java 之外的更多动态语言,情况会变得更糟:编译器将不再为您提供太多帮助

【讨论】:

我已经提到我会编译并运行该项目,看看它是否有效。 这意味着要再次测试每一个可能的用例,因为你不能确定什么会失败。 我同意。我在这里询问是否有更好的解决方案。【参考方案2】:

为每个已移除的依赖项进行编译的想法很好,但也不要忘记启动程序(某些依赖项仅在运行时需要)。

我不得不这样做几次,但我是手动完成的(不是通过程序自动完成的),我删除了所有依赖项并一一添加,直到代码编译,直到程序运行正常。

【讨论】:

逐个添加依赖也是个好主意,但是我觉得这样可能会添加一些没有用到的依赖。

以上是关于如何从 maven 项目中自动排除未使用的 jar 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在maven中排除jar包中引入的另一个jar包

如何从 Maven 程序集插件中排除依赖项:jar-with-dependencies?

maven pom 怎么从jar包里面排除一个类

如果我在依赖关系树中看不到它,如何从 Maven 中排除它?

在基于 NetBeans Maven 的项目中,在编程和编译时包含一个库,但从构建中排除

IDEA maven中引入的依赖不自动导入项目