gpt4 book ai didi

maven-3 - 从测试范围 Maven 中排除 servlet-api

转载 作者:行者123 更新时间:2023-12-03 00:05:00 25 4
gpt4 key购买 nike

我的 pom.xml 中有以下依赖项,以便我的 IDE (IntelliJ) 在编译期间具有可用的 servlet-api 类,但在构建中未提供。

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
<scope>provided</scope>
</dependency>

但是提供的范围在测试范围中运行时会将此依赖项中的类添加到类路径中,这对于我以编程方式启动的 Jetty 来说是一个问题。因为它的库中已经有了它,所以我得到了

 java.lang.SecurityException: class "javax.servlet.FilterRegistration"'s signer information does not match signer information of other classes in the same package

如果我删除此依赖项,Jetty 服务器会在测试范围内正确启动,但我需要 IntelliJ 的此依赖项来编译我的代码。解决这个问题的最佳方法是什么,有没有办法可以排除测试范围的这种依赖关系?

最佳答案

我自己也遇到了这个问题,想分享一下:

  • 依赖于javax.servlet:servlet-api:3.0-alpha-1,并且提供了范围,这样它就不会干扰我的WAR所在的容器最终部署到
  • 依赖 org.eclipse.jetty:jetty-webapp,范围为 test,以便我可以运行 Jetty Server 作为单元测试的一部分
  • 随后,jetty-webapp 需要对 org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016 的传递依赖

排除 jetty.orbit:javax.servlet 对我来说是没有选择的,因为 Jetty Server 需要 javax.servlet.HttpConstraintElement javax.servlet:servlet-api:3.0-alpha-1 不提供该功能。我最终这样做了:

  1. 删除对 javax.servlet:servlet-api 的依赖
  2. 显式添加对 jetty.orbit:javax.servlet 的依赖关系,并提供范围provided,从而完全替换 javax.servlet:servlet-api >

我不知道它需要的 HttpConstraintElement 是怎么回事;或许它会在 javax.servlet:servlet-api 的 future 版本中提供,感觉这比 Jetty 的实现更好。

编辑:

顺便说一句,这个问题是我通过摆弄一个自动格式化 POM 文件的插件的配置而引入的。它重新排序了依赖关系,因此与另一张海报重新排序 POM 文件的解决方案相悖。根据我丰富的 Maven 经验:如果您“依赖”依赖项的顺序,那就是主要的味道

关于maven-3 - 从测试范围 Maven 中排除 servlet-api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11084871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com