#java #maven #servlets #pom.xml
#java #maven #сервлеты #pom.xml
Вопрос:
Я пытаюсь создать проект Maven из work, который имеет servlet-api 3.1.0 в качестве предоставленной зависимости:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
Но затем не удается скомпилировать, потому что он не может найти getRequestURL()
from javax.servlet.http.HttpServletRequest
.
Позже я узнал, что он использует более старую версию servlet-api, которую я никогда не включал в свой POM:
Downloading from central: https://repo.maven.apache.org/maven2/javax/servlet/servlet-api/2.2/servlet-api-2.2.jar
Downloaded from central: https://repo.maven.apache.org/maven2/javax/servlet/servlet-api/2.2/servlet-api-2.2.jar (41 kB at 63 kB/s)
Возможно, эта версия servlet-api исходит из зависимости, но я не знаю, из какой, их много.
Как я могу переопределить эту версию той, которую я добавил в POM проекта?
Комментарии:
1. Вы пробовали запускать
mvn dependency:tree
? Это должно показать вам, из какой зависимости оно исходит, а затем вы можете исправить это в качестве первого шага2. Как сказал @mattfreake, это может быть временная зависимость.
3. * транзитивный …
4. @mattfreake Я не знал эту команду, спасибо! Я обнаружил
commons-configuration:commons-configuration:jar:1.3
, что это зависит от более старого API сервлетов. Я думаю, что мог бы заменить его чем-то другим, но в случае, если я не смогу, как я могу справиться с этим конфликтом версий?5. Я просто попытался добавить
<type>jar</type>
кcommons-configuration
зависимости, чтобы посмотреть, использует ли он только файл jar вместо всего POM, но то же самое.
Ответ №1:
Вы можете попробовать несколько вещей.
-
Попробуйте mvn dependency:tree, чтобы узнать, загружается ли он как часть другой зависимости.
-
Если вы не видите, что зависимость загружается как часть другой зависимости, очистите локальный репозиторий (он может быть внутри каталога .m2) и выполните чистую установку вашего приложения.
-
вы также можете поделиться своим pom.xml чтобы другие могли взглянуть и помочь.
Комментарии:
1. Просто попробовал
dependency:tree
мой проект и обнаружил,commons-configuration:commons-configuration:jar:1.3
что зависит от более старого API сервлета. Я просто попытался добавить<type>jar</type>
кcommons-configuration
зависимости, чтобы посмотреть, использует ли он только jar-файл вместо всего POM, но то же самое. Знаете ли вы какой-либо другой способ добиться этого?2. Кстати, это вся трассировка зависимостей:
commons-configuration:commons-configuration:jar:1.3
—>commons-jxpath:commons-jxpath:jar:1.2
—>javax.servlet:servlet-api:jar:2.2
3. Вы можете использовать исключения в вашем pom, чтобы исключить jar. Вы можете перейти по URL, если хотите узнать больше: maven.apache.org/guides/introduction /…