3

我想分发一个我在一些许可许可下编写的 Java 包。

结果speedytools-0.1.jar具有一些常见的 Java 依赖项,例如 Apache Commons 和 Guava。

分发这个 jar 的最具 Java 风格的方式是什么?我应该在我的分布式 zip 文件中包含依赖项吗?

4

2 回答 2

6

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

这将带来几个优点:

  • 用户可以将您的库与任何向后兼容版本的独立 Guava 结合使用。

  • 如果用户使用了不依赖于 Guava 的部分库,则用户可以通过从库中排除 Guava 传递依赖项来减少依赖项计数。

于 2013-04-23T10:33:14.260 回答
2

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

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

  • 如果您在未来的版本中添加依赖项,您可以自由更改您的库 - 用户不必重新配置他们的构建脚本。

  • 您可以修补这些库以满足您的需求:如果您想要对这些常见 Java 依赖项之一进行特殊构建,那么就破解 - 您的构建甚至不需要与公共版本兼容。

  • 它使下载和实现包的整个过程变得非常简单。这在多大程度上是有益的(甚至是可取的)显然取决于您的包裹是什么,它的作用以及您希望它为谁做。诚然,在我能想象的大多数用例中,我都倾向于使用 maven 解决方案——但尽管如此,我认为 jarjar 在像这个问题一样开放的问题中肯定有一席之地,因为肯定还有用例这是理想的。

ps很好的问题,期待看到其他答案。

于 2013-04-23T10:32:02.913 回答