如何分发带有依赖的开源jar包?

3
我想发布一个我写的Java包,使用宽松许可证。生成的 speedytools-0.1.jar 包含一些常见的Java依赖项,如Apache Commons和Guava。最符合Java风格的分发这个jar文件的方式是什么?我应该在我的发布zip文件中包含这些依赖项吗?

1
你是否正在使用Maven打包你的jar文件? - Magnilex
2个回答

6

你不应该将依赖包包含在你的jar中。只需将它们声明为Maven依赖项即可。

这将提供多个优点:

  • 用户可以与任何向后兼容的独立Guava版本一起使用你的库。

  • 如果用户只使用你库中不依赖于Guava的部分,可以从你的库中排除Guava传递依赖项以减少依赖项数目。


2

jarjar: "自2004年以来嵌入Java库。"

  • 您不必担心您的库依赖于特定版本的依赖项,这可能与另一个库的依赖项冲突。

  • 如果您在将来的版本中添加了依赖项,则可以自由更改您的库 - 用户无需重新配置构建脚本。

  • 您可以修补库以适应您的需求:如果您想要其中一个常见Java依赖项的特殊版本,则可以进行修改 - 您的构建甚至不需要与公共版本兼容。

  • 它使下载和实施您的软件包的整个过程变得非常简单。这对于您的软件包是什么、它做什么以及您希望谁使用它的程度显然有所益处(或者甚至是可取的)。诚然,在我能想象到的大多数用例中,我会倾向于Maven解决方案 - 但毫无疑问,我认为jarjar绝对在这样一个开放性问题中有一席之地,因为肯定还有适合它的用例。

附言:很棒的问题,期待看到其他答案。


jarjar很好,但它并没有真正回答外部依赖项是否应该包含在内的问题。 - Magnilex
@MagnusTengdahl: 你现在可以听到我了吗? :) - drew moore
是的先生! :) 尽管我仍然更喜欢另一个答案中的Maven方式(取决于jar的目的)。 - Magnilex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接