我的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>
Run Code Online (Sandbox Code Playgroud)
但是当在测试范围内运行时,提供的范围将此依赖关系中的类添加到类路径,这对于我以编程方式启动的Jetty是个问题.因为它已经在它的库中了,所以我得到了一个
java.lang.SecurityException: class "javax.servlet.FilterRegistration"'s signer information does not match signer information of other classes in the same package
Run Code Online (Sandbox Code Playgroud)
如果我删除了这个依赖项,Jetty服务器在测试范围内正确启动,但我需要IntelliJ的这个依赖项来编译我的代码.什么是解决这个问题的最佳方法,有没有办法可以排除测试范围的这种依赖性?
我自己就遇到过这个问题并想分享它:
javax.servlet:servlet-api:3.0-alpha-1范围provided,以便它不会干扰我的WAR最终部署到的容器org.eclipse.jetty:jetty-webapp范围test,以便我可以将Jetty Server作为单元测试的一部分运行org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016,需要jetty-webapp排除jetty.orbit:javax.servlet是没有选择(对我而言),因为Jetty Server需要一个javax.servlet.HttpConstraintElement不提供的javax.servlet:servlet-api:3.0-alpha-1.我最终这样做了:
javax.servlet:servlet-apijetty.orbit:javax.servlet范围内明确添加依赖关系provided,从而完全替换javax.servlet:servlet-api我不知道HttpConstraintElement它需要的是什么交易; 也许它将在未来的版本中可用javax.servlet:servlet-api,这种感觉更像是对Jetty实现相同的依赖.
编辑:
顺便说一句,我通过摆弄自动格式化POM文件的插件配置来引入问题.它重新排序依赖关系,因此反对另一个海报的解决方案来重新排序POM文件.在我丰富的Maven体验中:如果你依赖于依赖关系的顺序,那就是一种主要的气味.
| 归档时间: |
|
| 查看次数: |
13498 次 |
| 最近记录: |