Mar*_*eon 15 java client-library
我们为其他内部应用程序提供了一个客户端jar,以连接到我们的应用程序的REST API.我们的API依赖于一些标准的Jakarta库.将这些JAR文件包含在我们的客户端jar文件中是最佳做法吗?或者您只记录依赖项,并由客户确保他们的类路径上有这些jar?
Gar*_*vis 13
你应该不捆绑任何第三方jar文件到您自己的罐子作为一位超级罐子,但它是很好的,包括所有的副本都需要在你的发行版的罐子在一个lib目录,或什么都讲.
主要原因是您的客户可能正在使用某种形式的依赖管理系统(maven/ivy等),并且提供实际上不属于您的项目的包和类将使这些方案无效.
有一种替代方法是使用类似maven shade插件的东西将依赖项重定位到您自己的包命名空间中.这当然有一个缺点,你将增加你的库的代码大小,但从好的方面,你可以几乎保证你的依赖项的版本,而不影响你的客户可能使用的任何其他库.
编辑:回应马库斯莱昂评论:
捆绑/重新定位的可能解决方案:
最后,实际上确保你拥有你想要的依赖是非常困难的,因为java是一种后期绑定语言,你可以在你的类路径上覆盖你的依赖项(即使捆绑)被包括不同版本的人覆盖.
注意:我最近花了很多时间试图找出为什么我们的某个应用程序找不到新版本的log4j.原因:有人试图将其捆绑成一个随机完全无关的罐子.
你应该包括你依赖的任何罐子.如果您允许客户端提供标准jar,您可以依赖它们来提供正确的版本.如果你包含你知道你的应用程序使用的版本,那么对你们来说都是非常轻松的.
| 归档时间: |
|
| 查看次数: |
4952 次 |
| 最近记录: |