3

我是java新手。当我查看 jar 文件时,我看到文件名中包含版本而不是包含版本。

  • 在什么情况下这些都是一个好主意?
  • 将版本号放在 jar 文件名中的优点和缺点是什么?
  • 如果版本在 jar 文件名中,是否需要重新编译客户端 jar 才能使用它?

我环顾四周寻找这些信息,但我大多找到了规定的方向,而不是深思熟虑的解释。 这个链接有点帮助,但这两个 问题并不是真的。

4

4 回答 4

5

您正在寻找主观意见....我对此有主观意见。我维护 JDOM 项目。我们有许多 jar,在项目的早期,我们有无版本的 jar 名称。现在我们有了一个版本化的 jar 名称。

我们切换的原因是:

  • 很容易在类路径中查看您的 jar 版本(使调试和通信更容易)
  • 很容易询问用户他们有什么版本(使错误报告更容易)
  • 可以很容易地将多个 jar 存储在一个目录中(使管理更容易)
  • 许多“库”资源系统(如 maven)需要 jar 中的版本号

我听说有一个无版本 jar 的原因(但我不同意)

  • 更短的类路径——太多的类会溢出命令行长度。这是一个 BS 论点,拥有很多 Jars 也会遇到同样的问题。可以通过特殊 Jar 中的清单文件来解决。不是版本化 jar 的错。
  • 很容易放入一个新的 jar 版本(覆盖旧的 jar)——好吧,没有什么能阻止你自己重命名 jar,或者更新你的构建系统以引用新的 jar 版本。事实上,如果你用版本号来定义你的 jars,你就可以更好地控制你的构建过程。

我没有理由遇到令人信服的无版本 jar 是合适的。

于 2013-05-10T12:45:04.920 回答
3
  1. 版本化的 jar 文件总是一个好主意
  2. 该版本立即可见,您可以轻松发现冲突。我看不到任何实质性的*骗局。
  3. 不,只有当您在两个或多个 jar 文件中存在冲突的类文件时,jar 文件的名称才重要**。

*:例如,无意义的缺点,例如可执行 jar 可能更容易在没有版本编号的情况下键入

**:例如,如果你有com.foo.Bar两个 jar 文件中的类,类加载器将加载其中一个,通常取决于哪个是首先找到的。如果您有同一个 jar 的两个版本,这同样适用——您通常不知道将使用哪个版本。

于 2013-05-10T12:22:54.757 回答
1

我知道的唯一问题是当您构建在工作站上执行或作为脚本的一部分执行的 jar 文件时。

您可以通过在 jar 文件中包含脚本文件来解决此问题。

这是一个 Windows 示例:

应用程序.cmd

java.exe application_2013_05_10.jar

更新 jar 文件时,会同时更新脚本文件。用户执行 application.cmd 脚本文件。

于 2013-05-10T13:10:39.513 回答
1

当然,好主意,使用 Maven http://maven.apache.org/,它会自动构建带有版本的 jar,没有缺点只有优点

于 2013-05-10T12:24:10.560 回答