2012-06-18 3 views
14

У меня есть следующая зависимость в моем pom.xml, так что моя IDE (IntelliJ) имеет классы servlet-api, доступные во время компиляции, но не предоставленные в сборке.Исключить сервлет-api из области проверки Maven

<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 скомпилировать мой код. Каков наилучший способ решить эту проблему, есть ли способ исключить эту зависимость для области тестирования?

ответ

5

пытаются установить его скомпилировать прицел

+0

спасибо, что решил! –

+0

Я здесь потерялся - можете ли вы подробнее разобраться? Что означает «скомпилировать область»? – xhudik

+0

скомпилировать область действия, включить файлы библиотеки jar только во время процесса компиляции java-файлов. – Raman

3

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

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

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

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

Вот моя зависимость/* П-установка для молов + 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> 
7

Я просто имел эту проблему сам и хотел поделиться:

  • Завис на javax.servlet:servlet-api:3.0-alpha-1, с размахом provided , чтобы он не мешал контейнеру, чтобы моя WAR в конечном итоге была развернута на
  • Зависимость от org.eclipse.jetty:jetty-webapp с областью действия test, так что я могу запускать Jetty Serv эээ, как часть моего блока испытание
  • Впоследствии транзитивное зависимость от 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.Я в конечном итоге делаю это:

  1. Удалить зависимость от javax.servlet:servlet-api
  2. Явного добавить зависимость от jetty.orbit:javax.servlet, с размахом provided, следовательно, полностью заменив javax.servlet:servlet-api

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

Edit:

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

3

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

0

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

0

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

1

Я использую следующие настройки 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" 
-1

Для пользователей Gradle, установку с Jetty работает встроенный веб-приложение, основанное на 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' 
} 
Смежные вопросы