我看到很多Java包都有api,impl和bundle jars(name-api.jar,name-impl.jar,name-bundle.jar)。有人可以解释一下这些意思吗?这三个应用程序都需要吗?
答案 0 :(得分:6)
经常:
name-api.jar
仅包含API的界面。name-impl.jar
提供name-api.jar name-bundle.jar
将所有必需的类捆绑在一起以运行Java应用程序。答案 1 :(得分:6)
这个想法是你可以分离应用程序的依赖关系;试图使应用程序更便携。我们的想法是,您可以在编译时使应用程序依赖于api.jar
。然后,当您想要运行该程序时,您可以切换相应的实现jar(impl.jar
)和相应的资源包jar(bundle.jar
)。
作为一个例子,假设库进行了一些数据库交互。您编写代码以便引用api.jar
。现在假设你需要它来使用特定类型的数据库,例如MySQL - 然后你可以将特定于MySQL数据库的impl.jar
添加到类路径中以使其工作(如果以后需要一个不同的数据库 - 你只需要在类路径中切换该jar)。
bundle.jar
更加模糊,并不常见。这可用于为库提供配置设置。例如,它可用于提供特定于语言的设置,或某些更具体的配置。对于数据库库,可能是实现是针对所有MySQL版本设计的,资源包jar提供的配置文件允许它适用于特定的MySQL版本。
答案 2 :(得分:1)
api.jar
包含API接口。这些接口是API实现应遵循的合同。
impl.jar
是api.jar
的实现。如果没有impl.jar
,您就不能拥有api.jar
。
bundle.jar
是资源(如果我没弄错的话)。这些是运行所需的实现代码所需的资源。
答案 3 :(得分:-1)
我从未见过这样的安排。
如果设计师将应用程序打包成三个JAR,那么我会说这三个都是必需的。
但你应该认识到这只是设计师的选择。他/她可能刚刚创建了一个包含其中所有内容的JAR,而你却不会更聪明。
我现在在猜,但是如果你要打开那些JAR,你只会看到API JAR中的接口,impl JAR中的那些接口的实现,以及bundle JAR中的资源包和其他.properties文件。试试看吧。你会学到一些东西。