[英]Tomcat WAR, External JAR
我有一个高度模块化的应用程序,我正在尝试构建和计划它,这给了我一些问题。 应用如下。 我想创建一系列JAR文件,其中包含我的应用程序A.jar
, B.jar
和C.jar
的业务逻辑。
除了这些JAR文件之外,我还要在动态的和每个Jar的基础上向Web公开它们的每个功能。 因此,例如,我可能在一台计算机上安装了A.jar
和B.jar
,并且我希望能够将A.war
和B.war
部署到同一台计算机上的Tomcat容器中,其中A.war和B.war只需使用诸如Spring之类的字段来发送HTTP请求并将此参数转发到A.jar
和B.jar
。
问题 :
A.war
和B.war
而不会因A.jar
和B.jar
可能不在而失败? A.jar
和B.jar
添加到Tomcat的Classpath中,但是我将如何构建A.war
和B.war
并基本上只是向他们保证,他们需要的特定Jar文件将是他们何时从那里加载课程呢? 非常感谢任何帮助,我已经有一段时间成为Java开发人员了,但是直到最近,我还没有深入研究超级模块化代码,在这些代码中类路径成为一个问题。
我将如何构建A.war和B.war,并且基本上只是向他们保证,当他们从中加载类时,它们所需的特定Jar文件将在那里?
对于provided
的Maven依赖范围,这实际上是一个合适的情况。 根据官方文件 :
provided
-这很像compile
,但是表明您希望JDK或容器在运行时提供它。 它仅在编译和测试类路径上可用,并且不可传递。
也就是说,如果您有一个多模块Maven项目 ,可以从中构建A.jar
(例如a-lib模块), B.jar
(例如b-lib模块), A.war
(例如a-战争模块)和B.war
(例如b-war模块)
- project
|___a-lib
|___b-lib
|___a-war
|___b-war
war模块将依赖于库模块,但在provided
范围内:库将用于编译和测试,但不会打包为war文件的lib
文件夹的一部分。 但是,它们将需要在运行时作为Web容器类路径的一部分出现。
通常,provider与主机容器提供的(即开箱即用的)库一起使用。 一个经典的例子是Servlet API库:您的应用程序依赖于它,但是它总是由Servlet容器(即tomcat)提供。
同样,如果您实际上确实不想将其用于编译runtime
,则可以查看runtime
范围(在war模块中没有直接引用库代码的情况):
runtime
-此作用域指示依赖关系不是编译所必需的,而是执行所必需的。 它在运行时和测试类路径中,但不在编译类路径中。
运行时范围通常用于驱动程序(如JDBC驱动程序):您不会(您不应该)直接在代码中引用某些东西,但是在运行时确实需要。 因此,它将成为war lib
包装的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.