【问题标题】:Where to put 3rd party libs when using Maven with Tomcat?将 Maven 与 Tomcat 一起使用时,将 3rd 方库放在哪里?
【发布时间】:2015-02-20 21:58:47
【问题描述】:

我是 Maven 新手,我没有找到以下问题的正确答案。

例如,我有我的项目所依赖的库,例如:log4j、connector j、servlet api、junit、struts 等。当我只使用 Tomcat 时,我可以将这些 jars 放到 %CATALINA_HOME%\lib 文件夹中并使用它们。

但随着Maven 的加入,我可以为所有依赖项及其范围配置pom.xml

如果我这样做 - 我可以从 %CATALINA_HOME%\lib 文件夹中删除库吗?如果可以,那么Tomcat 怎么知道在哪里可以找到这个第 3 方罐子?

%CATALINA_HOME%\lib 文件夹中拥有tomcat-native 库(tomcat-util、tomcat-juli、jasper 等)并在pom.xml 中指定其他库是一种好习惯吗?

【问题讨论】:

    标签: java maven tomcat


    【解决方案1】:

    拥有 tomcat-native 库是一个好习惯吗 (tomcat-util、tomcat-juli、jasper 等)在 %CATALINA_HOME%\lib 文件夹中 并在 pom.xml 中指定其他库?

    是的,这确实是一个非常好的做法。这样,您的 Tomcat 安装保持不变,您可以使用它来部署另一个 webapp(可能有另一组依赖项,或者另一个版本中的相同依赖项)。

    Maven 会自动将依赖项放在最终 war 文件的 WEB-INF/lib 中,并且 Tomcat(以及所有其他服务器)将在此目录中查找库。

    顺便说一句,我注意到您在帖子中提到了 servlet-api。这个特殊的依赖是由 Tomcat 提供的,这意味着你不需要将它包含在你的最终战争中。使用 Maven,这意味着您需要将 <scope>provided</scope> 添加到此依赖项中。

    【讨论】:

    • 我接受你的回答,因为它有更详细的解释。谢谢
    • 您还可以解释一下:在这种情况下,我需要在 pom.xml 中指定 servlet-api 吗?如果我不这样做,在哪些情况下需要?
    • 是的,您确实需要在 pom.xml 中指定它,但要使用提供的范围。这是一个特殊的作用域,它告诉 Maven“我需要这个依赖项进行编译,但不要将它打包到我的战争中,因为它将由部署我的应用程序的服务器提供”。如果它包含在您的战争中,您将在 Tomcat 启动时收到警告,指出此 jar 不应该在您的库中。
    【解决方案2】:

    如果我这样做 - 我可以从 %CATALINA_HOME%\lib 文件夹中删除库吗?

    是的。

    如果我可以,那么 Tomcat 怎么知道在哪里可以找到这个 3rd 方 jar?

    类加载器知道,它必须查看您的war/WEB-INF/lib Directory

    在 %CATALINA_HOME%\lib 文件夹中拥有 tomcat-native 库(tomcat-util、tomcat-juli、jasper 等)并在 pom.xml 中指定其他库是一种好习惯吗?

    是的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 2022-01-17
      • 2012-06-07
      • 2014-04-12
      • 1970-01-01
      相关资源
      最近更新 更多