建造一个巨大的罐子而不是几个小罐子的优点/缺点?

时间:2010-09-28 19:27:24

标签: java installer jar

我见过像http://one-jar.sourceforge.net/http://fjep.sourceforge.net/index.html之类的程序会将你的应用程序jar和任何依赖项推广到一个可执行的jar中。

这样做的主要原因是什么?

5 个答案:

答案 0 :(得分:9)

有关:

  • 更容易分发,
  • 使类路径问题消失,
  • 甚至可以在Ms PowerPoint演示文稿中打包为可点击图标,OpenOffice也可以处理它。

反对:

  • 困难的包装 - 有时你会碰到一个角落的情况,例如:如何打包原生扩展,
  • 需要额外的构建步骤,
  • 生成更大的罐子,
  • 可能违反图书馆的许可协议,
  • 杀死了图书馆重用的概念,
  • 进行更新和
  • 调试(因为额外的类路径加载器)更难。

一般来说,这对于快速原型设计来说确实是一种很好的方式,但如果在更大的项目中使用,可能会有所不同。

答案 1 :(得分:5)

我在工作场所看到的一个正当理由是,供应商提供的修补程序jar需要在类路径中的原始版本之前。
但是,此应用程序是通过java webstart(jnlp)启动的,从java版本6开始,不再保证jar文件依赖项的顺序。
因此,确保重复的类文件处于正确顺序的唯一方法是将它们重新打包到超级jar中,保留最新的修补类文件并丢弃旧的重复文件。

答案 2 :(得分:4)

适用于依赖项的再分发许可证是构建“超级”jar的一个主要原因。当一个人创建一个“超级”jar时,通过“超级”jar的分发发生任何依赖关系的分发。在案例法并未充分涵盖这种情况的地区,人们可能会承担责任。

此外,某些商业上获得的依赖项可能会禁止重新打包依赖项,尤其是在原始分发不受保护的情况下。

PS:这不是法律建议。任何阅读此内容并依据此做出商业决策的人都应该咨询律师。

答案 3 :(得分:2)

有关:

  • 捆绑库和本机代码
  • 确保类路径元素的正确运行时顺序
  • 不需要安装人员

反对:

  • 新的顶级类加载器可能会引入正常开发周期中未见的问题
  • 根据不同许可条款重新包装图书馆的合法性

一般来说,如果它是一个小型实用程序应用程序,我会将它捆绑到一个jar中。对于较大的应用程序(可能需要安装程序),或者如果它是供其他人使用的库,我不会打扰。它只是可能破坏的事物链中的另一个环节。

答案 4 :(得分:1)

分发FTW!用户汇总到一个用户就容易多了。