我们可以依靠Maven在运行时处理类加载问题吗?

时间:2018-11-15 10:54:01

标签: java maven weblogic

亲爱的

我们正在将旧项目从ant迁移到maven。

有很多依赖项,我们希望对它们进行清理。

This question(尤其是第一条评论)确实引起了一些担忧...

这是一个大型项目,其使用情况在整个日历年中都不同,而且我们的测试范围也不广,因此“仅运行测试”是我们不能做的。

如果项目使用maven编译并部署,是否有办法使它在运行时失败?

如果是这样,是否有办法减轻这种“某种程度上”的影响?

感谢您的想法和见解,非常感谢所有输入...

2 个答案:

答案 0 :(得分:1)

为了便于讨论,我们假设不存在错误。

哪些事情会以无法预测的方式打破?

  • 即使您能够编译项目,也永远不会百分百确定自己已正确迁移了所有内容。使用Ant和Maven可能无法以相同的方式处理默认值。因此,您可能使用的依赖项(无论是否瞬态)与原始依赖项的工作方式略有不同。
  • Maven比Ant更标准化,这意味着您将无法始终在Maven和Ant中完全相同。 Ant可能使用脚本,而Maven可能使用您无法控制的插件。这可能导致您的应用程序出现不同的行为。

您可以怎么解决这个问题?

  • 花一些时间并编写一些集成测试,至少是幸福的道路,再加上几个常见的红色道路。
  • 测试,测试和测试。手动测试可以揭示意外行为。
  • 逐步推出您的新版本。如果将解决方案部署到大量服务器,请尝试仅在其中一个服务器上首先部署并监视异常情况。如果您可以启动新服务器并仅在其中提供少量流量(例如5%),以在不严重损害可用性的情况下使用真实数据监控错误,那么您也应该这样做。

始终牢记,迁移会带来风险。而且,这可能是从现在开始进行单元和集成测试的一个很好的理由。 :)

答案 1 :(得分:1)

是的,任何编译项目在运行时都会以多种方式失败,例如通过针对不同的库版本运行。

至少,您必须比较输出工件,因为在一天结束时,Ant和Maven都构建了可部署的工件:具有依赖项的WAR或JAR。检查两个库的版本,它们很有可能会有所不同,因为Ant无法处理依赖关系解析(除非您使用过Ivy)。