Исключить сервлет-api из области проверки Maven - программирование
Подтвердить что ты не робот

Исключить сервлет-api из области проверки Maven

У меня есть следующая зависимость в моем 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" signer information does not match signer information of other classes in the same package

Если я удалю эту зависимость, сервер Jetty запустится правильно в области проверки, но мне нужна эта зависимость для IntelliJ для компиляции моего кода. Каков наилучший способ решить эту проблему, можно ли исключить эту зависимость для области проверки?

4b9b3361

Ответ 1

попытайтесь установить его для компиляции области

Ответ 2

У меня просто была эта проблема и я хотел поделиться ею:

  • Зависимость от 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-api
  • Явно добавьте зависимость от jetty.orbit:javax.servlet, с областью provided, следовательно, полностью заменив javax.servlet:servlet-api

Я не знаю, что такое сделка с HttpConstraintElement, в которой она нуждалась; возможно, он будет доступен в будущих версиях javax.servlet:servlet-api, который sorta считает предпочтительной зависимостью от реализации Jetty того же самого.

Edit:

Кстати, проблема была введена мной, возившись с конфигурацией плагина, который автоматически форматирует файлы POM. Он переупорядочивает зависимости и как таковой работает против решения другого плаката для изменения порядка файла POM. В моем обширном опыте Maven: если вы "зависимы" от порядка ваших зависимостей, крупный запах.

Ответ 3

Я нашел решение, пытаясь не включать javax.servlet-api в путь к классам, выполняющий junit-тест. На самом деле я переместил сервлет-апи в самый конец банок в классе, и появилось просвещение...

Я использовал неверную версию сервлета-api. Я использовал 2.5, но мне нужен 3.0. Maven scope Я выбираю "предоставленный". Работает для запуска junit внутри eclipse и для выполнения "mvn test".

Тем не менее, я не понимаю, почему нет конфликта. Если бы я понял, что даже "предоставленные" зависимости будут отображаться в пути к классам при тестировании, поэтому может возникнуть конфликт - или, конечно же, - если я точно удалю правильные версии сервлета-api, используемые для компиляции, и причал servlet-api, тогда конфликта нет.

В любом случае, это работает для меня.

Здесь мои зависимости /* pom-setup для прилавок + сервлет 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>

Ответ 4

Для меня такая же ошибка. Я нашел старую версию Servlet (2.5), существовавшую на моем пути вместе с сервлета 3.0. Как только я удалю (исключаю) старую версию, моя проблема решена.

Ответ 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"

Ответ 6

Вы также можете использовать его со смесью гризли и причалов.

Ответ 7

Исключений в моем случае было недостаточно, но для меня работает понижающий причал до 7.6.14.v20131031.

Ответ 8

Для пользователей Gradle настройка с Jetty, выполняющая встроенный webapp на основе Spring WebMVC, работает со следующими зависимостями:

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'
}