1

在单个项目中使用多个 API 时,除了项目已经使用的其他所需库(例如 Apache Commons、日志记录等)之外,还会将每个 API 所需的 JAR 文件添加到项目中。这有时会导致大量的 jar 文件。

当某个 API 或库不再使用时,最好删除与其关联的 JAR 文件。但是,存在另一个 API 或库需要它的风险。这在项目构建过程中并不总是很明显。有时,缺少的 JAR 仅在运行时抛出错误。

我有以下问题:

  1. 处理这个问题的最佳方法是什么?换句话说,能够删除 JAR 而不冒以后出现运行时错误的风险吗?
  2. 有人告诉我 Maven 解决了这个问题。可以?如果使用的外部 API 不是基于 Maven 的,它会起作用吗?我能否在不担心运行时错误的情况下删除 JAR?我需要重写我的整个项目以基于 Maven 吗?
  3. 非 JVM 平台如何处理共享库的问题并删除它们?Java 在这方面是否缺乏,或者它是所有平台的共同问题?
4

2 回答 2

1

是的,我同意 Maven 在这种情况下可以帮助你。基本上在 Maven 中,每个工件(jar/war/ear/etc)的编译和运行时依赖项都在 pom.xml 文件中声明。如果多个依赖项依赖于相同的工件,则使用最新版本——例如:

A-1.0.jar -- depends on --> C-2.0.jar
B-1.0.jar -- depends on --> C-2.1.jar

您的项目中仅包含 C-2.1.jar。

如果找不到/取出所需的依赖项,Maven 构建将自动失败。因此,为了避免缺少运行时依赖项,您可以在运行时范围内声明对特定工件的依赖项——当您不再需要它时,只需将其取出

于 2013-05-19T23:57:29.493 回答
0

多年前我曾在 UNIX 上使用过一个老技巧,它可能仍然对您有用。首先使用 UNIX“触摸”将所有文件的日期/时间设置为当前日期/时间。然后等待至少一分钟。然后运行您的应用程序。然后运行 ​​UNIX "ls -lut" 列出所有文件,但这次未使用的文件将在第一步中设置日期/时间,而使用的文件将具有更新的日期/时间,因为“u”开关报告上次使用的日期/时间。

于 2013-05-20T00:12:46.587 回答