【问题标题】:Maven compiling with dependencies not in POMMaven 使用不在 POM 中的依赖项进行编译
【发布时间】:2021-02-23 13:51:43
【问题描述】:

我正在尝试从工作中构建一个 Maven 项目,它具有 servlet-api 3.1.0 作为提供的依赖项:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  <scope>provided</scope>
</dependency>

然后编译失败,因为它无法从javax.servlet.http.HttpServletRequest 中找到getRequestURL()

后来,我发现它使用的是旧版本的 servlet-api,我从未将它包含在我的 POM 中:

Downloading from central: https://repo.maven.apache.org/maven2/javax/servlet/servlet-api/2.2/servlet-api-2.2.jar
Downloaded from central: https://repo.maven.apache.org/maven2/javax/servlet/servlet-api/2.2/servlet-api-2.2.jar (41 kB at 63 kB/s)

也许该版本的 servlet-api 来自依赖项,但我不知道来自哪个依赖项,它们很多。

如何用我在项目的 POM 中添加的版本覆盖该版本?

【问题讨论】:

  • 你试过运行mvn dependency:tree吗?这应该向您显示它来自哪个依赖项,然后您可以将其作为第一步进行修复
  • 正如@mattfreake 所说,它可能是一个transient 依赖。
  • *传递...
  • @mattfreake 我不知道那个命令,谢谢!我发现commons-configuration:commons-configuration:jar:1.3 依赖于较旧的 servlet API。我想我可以用别的东西代替它,但如果我不能,我该如何处理这个版本冲突?
  • 我只是尝试将 &lt;type&gt;jar&lt;/type&gt; 添加到 commons-configuration 依赖项中,看看它是否只使用了 jar 文件而不是整个 POM 文件,但还是一样。

标签: java maven servlets pom.xml


【解决方案1】:

你可以尝试几件事。

  1. 尝试 mvn dependency:tree 以查看它是否作为另一个依赖项的一部分下载。

  2. 如果您没有看到作为另一个依赖项的一部分下载的依赖项,请清理您的本地存储库(它可能位于 .m2 目录中)并全新安装您的应用程序。

  3. 您也可以分享您的 pom.xml,以便其他人可以查看和帮助。

【讨论】:

  • 刚刚尝试dependency:tree 我的项目并发现commons-configuration:commons-configuration:jar:1.3 依赖于较旧的servlet API。我只是尝试将&lt;type&gt;jar&lt;/type&gt; 添加到commons-configuration 依赖项中,以查看它是否仅使用了jar 文件而不是整个POM 文件,但相同。你知道其他方法可以实现吗?
  • 顺便说一句,这是整个依赖跟踪:commons-configuration:commons-configuration:jar:1.3 --> commons-jxpath:commons-jxpath:jar:1.2 --> javax.servlet:servlet-api:jar:2.2
  • 您可以在 pom 中使用排除项来排除 jar。想了解更多可以关注网址:maven.apache.org/guides/introduction/…
猜你喜欢
  • 2019-07-12
  • 1970-01-01
  • 2022-12-06
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 2014-03-22
相关资源
最近更新 更多