从测试范围的Maven排除servlet的API(Exclude servlet-api from

2019-07-30 00:27发布

我有以下的依赖性在我的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>

但是提供的范围,测试范围运行时,增加了在这个依赖到classpath的类,那是码头的一个问题,我开始编程。 因为它已经在其图书馆中,我得到一个

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

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

Answer 1:

尝试设置它来编译范围



Answer 2:

我只是有这个问题我自己,并希望分享:

  • 依赖于javax.servlet:servlet-api:3.0-alpha-1具有范围provided ,使得其不与我的WAR最终部署到容器干扰
  • 依赖于org.eclipse.jetty:jetty-webapp ,有范围test ,这样我就可以运行Jetty服务器作为我的单元测试部分
  • 随后在一传递依赖org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016 ,通过在需要jetty-webapp

排除jetty.orbit:javax.servlet没有选项(对我来说),因为码头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 ,它八九不离十感觉是在码头的实现相同的优选依赖。

编辑:

顺便说一句,这个问题得到了由我介绍了与自动格式化POM文件的插件的配置摆弄。 它重新排序的依赖性,因此对作品另一个海报的解决方案来重新排序POM文件。 在我的广袤Maven的经验:如果你是你依赖的顺序上的“依赖”,这是一个重大的气味



Answer 3:

对我来说,同样的错误来了。 我发现旧版本的Servlet(2.5)在我的路径存在使用Servlet 3.0一起。 一旦我删除(排除)老版我的问题解决了。



Answer 4:

我找到了解决办法尽量不包括在运行JUnit测试类路径的javax.servlet-API时。 其实我感动的servlet-API在类路径和启示罐子的尽头传来......

我用servlet的API的版本错误。 我用的是2.5,但需要3.0。 Maven的范围我选择“设置”。 适用于在Eclipse和“MVN测试”的执行运行JUnit。

不过,我不明白为什么没有冲突。 如果我这样做是正确甚至是“提供”的依赖将在类路径进行测试时被曝光,所以有可能是一个冲突 - 或,当然 - 如果我正好找到用于编译的servlet的API的正确版本和码头的servlet的API,那么就没有冲突。

不管怎么说,这对我的作品。

这里是我的依赖性/ * POM-设置为码头+ Servlet API的:

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>8.1.4.v20120524</version>
    <type>jar</type>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-servlet</artifactId>
    <version>8.1.4.v20120524</version>
    <type>jar</type>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-webapp</artifactId>
    <version>8.1.4.v20120524</version>
    <type>jar</type>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-jsp</artifactId>
    <version>8.1.4.v20120524</version>
    <type>jar</type>
    <scope>test</scope>
</dependency>

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


Answer 5:

我用下面的SBT项目设置来解决类似的问题:

  "any dependency program that includes servlet-api java library code" %  excludeAll ExclusionRule(organization = "org.eclipse.jetty.servlet-api"),
  "org.mortbay.jetty" % "servlet-api" % "3.0.20100224"


Answer 6:

您也可以与灰熊和码头依赖的混合物有它。



Answer 7:

排除是不够的,在我的情况,但降级的码头7.6.14.v20131031为我工作。



Answer 8:

对于摇篮用户,基于Spring WebMVC运行嵌入式web应用与码头的设置适用于以下依存关系:

apply plugin: 'war'
apply plugin: 'jetty'
apply plugin: 'eclipse-wtp'
dependencies {

   // Logging support
   compile 'org.slf4j:slf4j-api:1.7.7'
   runtime 'org.slf4j:slf4j-simple:1.7.7'

   // Spring WebMVC part
   compile 'org.springframework:spring-web:4.0.6.RELEASE'
   compile 'org.springframework:spring-webmvc:4.0.6.RELEASE'
   compile 'org.springframework:spring-context:4.0.6.RELEASE'
   compile 'org.springframework:spring-core:4.0.6.RELEASE'
   compile 'org.springframework:spring-beans:4.0.6.RELEASE'
   compile 'org.springframework:spring-expression:4.0.6.RELEASE'

   // Jetty support
   compile 'org.eclipse.jetty:jetty-server:8.1.4.v20120524'
   compile 'org.eclipse.jetty:jetty-servlet:8.1.4.v20120524'
   compile 'org.eclipse.jetty:jetty-webapp:8.1.4.v20120524'
   compile 'org.eclipse.jetty:jetty-jsp:8.1.4.v20120524'

   // Web Container interaction
   //providedCompile 'javax.servlet:servlet-api:2.5'
   runtime 'jstl:jstl:1.2'

   // Unit Testing
   testCompile 'junit:junit:4.11'
   testCompile 'org.mockito:mockito-all:1.9.5'
   testCompile 'org.springframework:spring-test:3.2.0.RELEASE'
}


文章来源: Exclude servlet-api from test scope Maven
标签: maven-3