Java 在WAR文件中打包JAR文件
我有一系列相关的Java项目。我想把它们打包成一个JAR文件,用在我的WAR文件中。这些项目依赖于大量的外部库和项目,如log4j、apachecommons等 我选择Eclipse中的所有项目并导出为JAR文件,然后将JAR文件复制到WAR的/WEB-INF/lib文件夹中,然后部署我的应用程序。我有以下问题:Java 在WAR文件中打包JAR文件,java,jar,war,Java,Jar,War,我有一系列相关的Java项目。我想把它们打包成一个JAR文件,用在我的WAR文件中。这些项目依赖于大量的外部库和项目,如log4j、apachecommons等 我选择Eclipse中的所有项目并导出为JAR文件,然后将JAR文件复制到WAR的/WEB-INF/lib文件夹中,然后部署我的应用程序。我有以下问题: ClassNotFoundException。web应用程序找不到打包到我的JAR文件中的库。我通过将所有依赖库移出/WEB-INF/lib文件夹并将类路径条目添加到JAR的MANIF
这些问题有标准的解决方案吗?谢谢。这个问题的标准解决方案是将您所依赖的所有jar文件放在WEB-INF/lib文件夹中。您正在寻找的是非标准解决方案
其中有很多。修改清单文件中的类路径是其中之一。您还可以将它们放在容器共享库目录中,或者放在任何位置,并将它们添加到容器进程的全局类路径中。所有这些都可以,但没有一个被认为是最佳实践。我建议您使用自动依赖关系管理功能。如果您已经为构建脚本准备了ant,那么ivy是一个很好的解决方案。如果您没有构建脚本,maven可能值得研究
依赖项管理自动为您直接使用的依赖项(JAR)提取可传递的依赖项。我在部署时也遇到了同样的问题。为了解决这个问题,我刚刚更改了项目的属性:
- 右键单击项目
- 选择“属性”-->“部署程序集”-->“添加”-->“Java生成路径项”
- 选择要添加到web应用的所有库
如果操作正确,这将自动将外部.jar库添加到.war文件中。为什么要将所有依赖项都放在一个jar中?简单地将它们全部放入
WEB-INF/lib
,有什么不对?(另外:您不需要任何类路径条目,webapp可以自动访问WEB-INF/lib
)中的所有jar文件。我更愿意让我的jar文件自包含且可分发,而不是在WEB-INF/lib中分解不必要的依赖关系。它们不是不必要的,是吗?如果您想要一个自包含的jar,那么就不要使用外部库。只有一个词:maven。但你似乎面对的是错误的方向。一个自包含的web应用程序只由WAR文件而不是JAR文件表示。将依赖项放在WEB-INF/lib中并不会使它或多或少具有可分发性。如果jar文件A试图访问jar文件B中的类,并且A和B都在战争中,我就遇到了同样的问题!