繁体   English   中英

Tomcat WAR,外部JAR

[英]Tomcat WAR, External JAR

我有一个高度模块化的应用程序,我正在尝试构建和计划它,这给了我一些问题。 应用如下。 我想创建一系列JAR文件,其中包含我的应用程序A.jarB.jarC.jar的业务逻辑。

除了这些JAR文件之外,我还要在动态的和每个Jar的基础上向Web公开它们的每个功能。 因此,例如,我可能在一台计算机上安装了A.jarB.jar ,并且我希望能够将A.warB.war部署到同一台计算机上的Tomcat容器中,其中A.war和B.war只需使用诸如Spring之类的字段来发送HTTP请求并将此参数转发到A.jarB.jar

问题

  • 我如何构建A.warB.war而不会因A.jarB.jar可能不在而失败?
  • 我知道我可以将A.jarB.jar添加到Tomcat的Classpath中,但是我将如何构建A.warB.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM