繁体   English   中英

如何(安全地)删除Eclipse中不必要的Maven依赖项?

[英]How to (safely) remove unnecessary Maven dependencies in Eclipse?

我正在使用Eclipse中的Java项目,使用Maven来构建和管理依赖项。 该项目分布在5个Eclipse项目中,其中一个是父POM。 我正在开发一个服务器实现,它基于另一个团队实现的更复杂的服务器。 所以我的工作基于他们已有的代码和POM文件,现在在这些Eclipse项目的POM中有许多不必要的依赖。

相对而言,我是Maven初学者,但我熟悉这个命令:

mvn dependency:analyze

当我使用Eclipse Maven插件运行此命令时,我将获得一个很长的“Unused声明的依赖项”列表,但是当我尝试删除其中的一些时,我的程序将会破坏,有时会以神秘的方式。

是否有一种普遍接受的最佳实践方法来处理这个问题? 或者我是否已经辞职,逐个删除这些(可能)未使用的依赖项,确保在删除每个依赖项后没有任何内容被破坏?

您可以尝试在启用java -verbose:class选项的情况下运行代码。 这将生成输出,显示每个类从哪里(哪个jar文件)加载。 (注意:在Sun JRE上,这会被写入标准输出;我认为在IBM JRE上它会被写入标准错误。)以下是输出示例:

[Loaded junit.framework.AssertionFailedError from file:/D:/Documents%20and%20Settings/mike/.m2/repository/junit/junit/3.8.2/junit-3.8.2.jar]
[Loaded junit.framework.ComparisonFailure from file:/D:/Documents%20and%20Settings/mike/.m2/repository/junit/junit/3.8.2/junit-3.8.2.jar]
[Loaded org.jmock.core.SelfDescribing from file:/D:/Documents%20and%20Settings/mike/.m2/repository/jmock/jmock/1.2.0/jmock-1.2.0.jar]
[Loaded org.apache.log4j.spi.Configurator from file:/D:/Documents%20and%20Settings/mike/.m2/repository/log4j/log4j/1.2.9/log4j-1.2.9.jar]
[Loaded org.apache.log4j.xml.DOMConfigurator from file:/D:/Documents%20and%20Settings/mike/.m2/repository/log4j/log4j/1.2.9/log4j-1.2.9.jar]

只要您运行程序的大部分逻辑(以便加载所需的类),就可以安全地假设verbose:class输出中未提及的任何jar都可以作为maven依赖项删除。

你也可以在verbose:class输出上进行搜索和替换,例如将其转换为csv,然后将其带入电子表格程序以通过jar文件进行排序/分组。

仍然是一些手工努力,但至少它会给你一个开始的地方!

鉴于从内省到服务的任何事情都可能在运行时中断,我不知道有关于此的普遍接受的最佳实践。 单元测试可以帮助你,但如果你没有良好的覆盖范围,他们可能会给你一种虚假的安全感。 在删除每个包之后,您仍然需要检查功能测试(希望是自动化的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM