Java 包括整个包装还是只包括特定的罐子?

Java 包括整个包装还是只包括特定的罐子?,java,jar,war,Java,Jar,War,我的Java项目正在使用一些第三方jar包。当我生成最终的war文件时,我应该将第三方软件包作为一个整体包括进来,还是应该从每个软件包中选择我的项目使用的特定JAR?用Java做这件事的正确方法是什么 执行此操作的标准方法是将所有依赖JAR打包到WAR文件的WEB-INF/lib目录中。大多数构建工具,如Ant或Maven,默认情况下都会这样做 如果您知道WAR文件的最终大小,可以逐个包重新打包,但这是一个例外。如果您正在处理客户端部署(例如WebStart)之类的事情,则更频繁地执行此操作,您

我的Java项目正在使用一些第三方jar包。当我生成最终的war文件时,我应该将第三方软件包作为一个整体包括进来,还是应该从每个软件包中选择我的项目使用的特定JAR?用Java做这件事的正确方法是什么

执行此操作的标准方法是将所有依赖JAR打包到WAR文件的
WEB-INF/lib
目录中。大多数构建工具,如Ant或Maven,默认情况下都会这样做

如果您知道WAR文件的最终大小,可以逐个包重新打包,但这是一个例外。如果您正在处理客户端部署(例如WebStart)之类的事情,则更频繁地执行此操作,您需要将下载大小保持在最小


建议:保持简单。

标准方法是将所有依赖JAR打包到WAR文件的
WEB-INF/lib
目录中。大多数构建工具,如Ant或Maven,默认情况下都会这样做

如果您知道WAR文件的最终大小,可以逐个包重新打包,但这是一个例外。如果您正在处理客户端部署(例如WebStart)之类的事情,则更频繁地执行此操作,您需要将下载大小保持在最小

建议:保持简单。

最好的答案是“视情况而定…”

如果您运行使用相同第三方的其他web应用程序,最好将这些JAR放在某个共享位置(所有应用程序服务器都提供这样的目录)。您的web应用在运行时所需的类将从此共享位置加载,并可用于您的web应用。这种方法将使您的战争规模更小,并缩短部署时间

示例:webapp1和webapp2都使用jsf-api.jar—没有理由将这两个jar打包—您可以将其放入共享库中。在您使用3个jar和20个jar描述的情况下,我将使用一些工具来分析应用程序的依赖关系图(以便尽可能少地打包)。我使用的依赖关系图工具:是一个外部工具,它生成的依赖关系图比Eclipse插件或Eclipse类依赖关系视图可读性强得多。(可能其他IDE有更好的工具?我想IntelliJ有…)

但是,如果不同的web应用程序使用同一第三方jar的不同版本,您可能会遇到版本冲突。 解决这些冲突可能很困难,您需要了解应用程序服务器供应商的部署机制是如何工作的(组件和应用程序的类加载策略)。因此,最安全的()方法是在战争的WEB-INF\lib中包含所需的罐子。

最好的答案是“视情况而定…”

如果您运行使用相同第三方的其他web应用程序,最好将这些JAR放在某个共享位置(所有应用程序服务器都提供这样的目录)。您的web应用在运行时所需的类将从此共享位置加载,并可用于您的web应用。这种方法将使您的战争规模更小,并缩短部署时间

示例:webapp1和webapp2都使用jsf-api.jar—没有理由将这两个jar打包—您可以将其放入共享库中。在您使用3个jar和20个jar描述的情况下,我将使用一些工具来分析应用程序的依赖关系图(以便尽可能少地打包)。我使用的依赖关系图工具:是一个外部工具,它生成的依赖关系图比Eclipse插件或Eclipse类依赖关系视图可读性强得多。(可能其他IDE有更好的工具?我想IntelliJ有…)

但是,如果不同的web应用程序使用同一第三方jar的不同版本,您可能会遇到版本冲突。
解决这些冲突可能很困难,您需要了解应用程序服务器供应商的部署机制是如何工作的(组件和应用程序的类加载策略)。因此,最安全的()方法是在war的WEB-INF\lib下包含所需的JAR。

显然,war文件应该打包您使用的所有第三方库(JAR文件)。你所说的每个软件包中的特定罐子是什么意思?假设我使用了一个有20个罐子的Tomahawk库。我发现我的应用程序可以使用ony3jar(如何确保这在所有情况下都是正确的,这是我需要问的另一个问题)。问题是:我应该只将3个JAR复制到WEB-INF\lib还是将全部20个JAR复制到WEB-INF\lib?正确的做法是什么?除非您使用像Maven这样的工具来解决您的可传递依赖关系,否则要找到您真正需要的依赖关系,通常需要反复尝试。在大多数情况下,JAR的名称会给您一个提示。显然,您的war文件应该打包您使用的所有第三方库(JAR文件)。你所说的每个软件包中的特定罐子是什么意思?假设我使用了一个有20个罐子的Tomahawk库。我发现我的应用程序可以使用ony3jar(如何确保这在所有情况下都是正确的,这是我需要问的另一个问题)。问题是:我应该只将3个JAR复制到WEB-INF\lib还是将全部20个JAR复制到WEB-INF\lib?正确的做法是什么?除非您使用像Maven这样的工具来解决您的可传递依赖关系,否则要找到您真正需要的依赖关系,通常需要反复尝试。在大多数情况下,罐子的名称会给你一个提示。谢谢。我对“打包所有依赖的jar”有点困惑。你的意思是我包含了整个软件包,还是为了测试哪些JAR是“依赖的”并被我的代码实际使用?嗯,你需要一些方法来定义你正在使用的库。假设您正在使用来自Jakarta Commons Lang的一些类(
StringUtils
等),那么这意味着您必须包含Commons Lang jar文件。您是如何使用Eclipse编译代码的?你正在使用的图书馆