java - 删除java项目中不必要的依赖项

标签 java eclipse-plugin dependencies dependency-management

这个问题是Java依赖关系不是静态的,而是动态的。我读过这个stackoverflow link ,但这是关于静态依赖关系,谷歌搜索得到了类似的结果。

这是我的问题:

这是一个非常大的项目(20K+ Java 文件),已经运行了 10 年,目前有 50 多名开发人员。这里的重新架构一直在发生,所以你有一个新的堆栈和一个旧的层堆栈。大多数情况下,降低风险意味着您无法立即删除某个类,而是 calle 方法同时保留对新类和旧类的调用。对开发人员的标准指示是:在生产环境中执行应用程序期间不应调用旧类。

当前解决方法:

他们所做的就是在旧类上保留一个“假旗”,并祈祷它不会被调用。如果确实如此(因为开发人员可能会错过指向新类)并且生产中出现问题,那么将针对旧类的标志设置为 true,那么世界上一切都会好起来。 (这样他们只需更改具有该标志的属性文件,而不必重新编译)在产品中进行一年左右的此类测试后,他们放弃了旧的类文件。现在这可能不是技术上最好的方法,但在实践中,对于任务关键型应用程序,您不会冒险,没有人能够记住/知道这 20K 类在 Java 中做什么,甚至在功能上。

我在寻找什么:

查找未使用的类的工具或方法。

  1. 现在,这在某些方面是一个先有鸡还是先有蛋的问题,因为直到您执行某种罕见的场景之前,您将无法找出在运行时调用的是哪个旧类,因此也无法找出现有的解决方案。

  2. 如果您使用 PMD 等静态代码分析工具,它们不会告诉您未使用的工具,因为它们实际上至少在代码级别被某些或其他类调用。

    <
  3. 也许,这只是疯狂的想法,某种工具可以从顶级操作层开始遍历所有依赖链/树,并获取结果

当然,响应式(Reactive)方法是构建一个完全自动化的回归测试套件并运行所有可能的场景,不幸的是,由于预算、人力限制等原因,这是不可能的。

我需要的是一种积极主动的方式来优化我的代码。也许这是一厢情愿的想法,这甚至是可能的,但我有一种挥之不去的感觉,这个问题不是随机的,而是结构化的,所以可能在某个地方有解决方案。

任何想法表示赞赏。 !!

最佳答案

由于动态类加载和反射,可能无法找到正确的解决方案。你可以从 JBoss Tattletale 开始。它可能也可以作为声纳插件使用。它可以向您显示未使用的 jar ,但它只进行静态代码分析,因此您会得到一些错误的错误。但是当您浏览列表时,您可以忽略诸如 spring-security 等内容。但是当您找到自己的 jar 时,您很可能会知道该模块中是否没有动态类加载或反射

关于java - 删除java项目中不必要的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10880726/

相关文章:

linux - ffmpeg 与 libsoxr 解决依赖关系

java - 如何在 selenium webdriver 中传递登录页面的无效测试数据?

eclipse - 无法在 Eclipse 中添加 SoapUI 插件

java - 导出Eclipse插件

java - Eclipse插件开发中如何获取源文件夹的位置

.net - 是否可以拥有共享/静态依赖属性?

java - 无法从 Android 设备连接到 Java 服务器

java - hibernate 对象与数据库物理模型

java - 尝试在 Windows 中卸载我的 Java 应用程序时询问密码

ruby - 未安装 gem 依赖项