2013-05-10 82 views
2

我是新来的java。当我查看jar文件时,我看到文件名中包含版本的混合,而不是。什么时候jar文件名应该有一个版本号?这有什么优点和缺点?

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

我环顾四周找到了这方面的信息,但我主要是找到说明方向,而不是深思熟虑的解释。 This link有点帮助,但thesetwo所以问题不是真的。

+0

@rgettman,是一个更为具体的解释,为什么一个问题关闭了太多问?这是一个在其他地方不容易回答的问题,而且对我来说似乎并不主观。我觉得我证明了我在别处研究过这个问题?我对其他几个无用的SO问题(你是否应该版本化?是的,无论是什么问题)并不满意,并且想知道什么样的力量会促成任何选择。是stackoverflow错误的地方去得到一个技术问题的详细答案?期待关于问题结束的反馈意见是不合理的吗? – tallseth 2013-05-13 12:56:38

+0

FWIW我认为这是一个完全合理的问题。 Egomaniacs在没有给出理由的情况下关闭问题根本没有帮助。 – ksl 2015-12-08 14:55:32

回答

3
  1. 版本控制的JAR文件是一个好主意
  2. 版本是立即可见&,你可以很容易地发现冲突。我看不到任何实质性的* con。
  3. 不,只有在两个或多个jar文件**中存在冲突的类文件时,jar文件的名称才有意义。

*:例如,insignificat缺点,比如可执行罐子可能是不容易的版本号是键入

**: 例如,如果你有类com.foo.Bar在两个jar-文件​​,类加载器将加载任意一个,通常取决于哪个先找到。如果您有两个版本的相同jar文件,则同样适用 - 您通常不知道将使用哪个版本。

+0

你能详细说说3吗? – 2013-05-10 12:24:26

+0

如果您将这些罐子保存在一个文件夹中,并且在IDE中手动更新对这些罐子的引用,那么最终的版本可能会超过您的同事。所以,我建议使用maven。 (而不是替换文件“mylib.jar”,你可能会不小心添加一个(“mylib-1.0.jar”和“mylib-1.1.jar”), ) 同样,如果你正在使用maven或其他项目管理工具,它不应该是一个问题 – Igor 2013-05-10 12:38:05

+0

我很困惑如果我有两个版本的“相同”的jar可用(但由于版本不同的文件名)使用的是**任意的**?这似乎很可怕 – tallseth 2013-05-10 13:17:13

1

当然,好主意,使用Maven http://maven.apache.org/,它会自动建立与版本罐子,没有缺点优点只有

+0

这听起来不错,但我更感兴趣的是为什么要选择一个约定而不是另外的,而不是规定性的建议去做x或y。 – tallseth 2013-05-10 13:18:37

4

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

我们切换的原因是:

  • 这是很容易看到罐子你的版本在classpath(使调试和沟通更加容易)
  • 这是很容易让用户的什么版本他们(品牌错误报告更容易)
  • 就容易多罐储存在一个单独的目录(使管理更轻松)
  • 许多“库”资源系统(如Maven的)需要在罐子里的版本号

的原因,我已经听到了有versionless罐子(但我不同意)

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

我没有理由在没有理由的情况下强调无版本jar是合适的。

1

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

你可以通过在你的jar文件中包含一个脚本文件来解决这个问题。

下面是一个Windows示例:

application.cmd

java.exe application_2013_05_10.jar 

当您更新jar文件,则在更新的同时脚本文件(S)。用户执行application.cmd脚本文件。

相关问题