我们安装了Weblogic 10.3.6。 在其上运行的应用程序需要以下jar
com.oracle.ws.http_client_1.3.0.0.jar
上面的jar位于服务器包Oracle \ Middleware \ modules \ com.oracle.ws.http_client_1.3.0.0.jar
什么是正确的方法? 这个jar(看起来是由Oracle编写的系统库,在mvnrepository网站上找不到)是否应该添加到服务器类路径中,还是应该将它添加到应用程序存档(war)?感谢。
更新:上面的jar也捆绑了Weblogic(默认情况下没有添加到classpath),并且在maven public repo中找不到。那么,这不是要直接添加到应用程序中吗?
答案 0 :(得分:9)
放置JAR文件和其他依赖项的最佳位置是打包它
在WAR内,而不是保持system
classpath
。通过做这个
你有以下优势。
container
。 system
&之间没有问题webapp
classloaders
。可能存在争议,因为通过打包WAR文件中的所有内容可能会结束
显着增加WAR文件大小。但它确实如此
当有一个搞笑制作错误时,令人沮丧
深夜只是因为你错过了来更新 http_client_1.3.0.0.jar
http_client_1.4.x.y.jar
和其他人明确说明完全相同的WAR文件
在测试环境中工作得很好。
根据我的经验,我相信WAR文件的一致性是一个重要方面。因此,建议您将每个必需的JAR文件打包到WAR中,直到除非JAR由容器隐式提供。
:)
答案 1 :(得分:3)
这取决于。当您在类路径中插入依赖项时,它会被默认的类加载器加载 - 例如,所有枚举和单例都由此默认类加载器初始化。根据服务器的配置,所有应用程序都会共享这些实例,或者它们可能会自己独立实例化。
此外,当您向类路径添加依赖关系时,无论是否需要,它都可供服务器上的所有应用程序使用。
如果你只有一个申请,那就不会有所作为。如果还有更多,那么将JAR添加到应用程序会更安全,除非您明确希望在服务器上全局使用此库(以及此特定版本)以供所有已部署的WAR使用。
编辑:
显然,您可以确定每个应用程序都有自己的枚举和单例实例,如here所述。因此,类路径方法中唯一的问题是,如果不同的应用程序需要同一个库的不同版本。
答案 2 :(得分:3)
如果jar是应用程序服务器环境/构建的一部分,我不会将它添加到war / ear文件中。它应该可以通过所有env DIT / UAT / PROD(envs需要与prod一致)。此外,当应用应用程序serever修复程序或服务器升级时,我们将使用最新的jar。
在其他情况下(外部),最好将其打包在战争中,以避免从env迁移到env时出现问题。