powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / IntelliJ указывает тестовые зависимости в classpath
5 сообщений из 5, страница 1 из 1
IntelliJ указывает тестовые зависимости в classpath
    #39404095
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джентльмены, кто-нибудь сталкивался со следующей проблемой?

Проект собирается через Maven. Есть библиотека "блабла-test-framework", которая подключена в test scope. Этот test-framework в свою очередь использует для компиляции еще ряд библиотек, объявляя их в compile scope.

Схема зависимостей в проекте получается следующая:

--- maven-dependency-plugin:2.8:tree (default-cli) @ my-webapp ---
a.b.c.my-webapp:jar:1.0-SNAPSHOT
+- x.y.z.test-framework:test-framework-core:jar:1.0:test
| +- x.y.z.test-framework:test-framework-util:jar:1.0:compile <-- Попадает в classpath

Проблема заключается в том, что при запуске проекта через IntelliJ Run configuration в classpath оказываются compile-зависимости тестовой библиотеки:
/path/to/java -classpath "...:.../x.y.z.test-framework/test-framework-util/test-framework-util-1.0.jar:..." a.b.c.Main

Мне кажется, что это баг, а именно что IntelliJ при сборке зависимостей тупо собирает все библиотеки, которые объявлены в compile scope, игнорируя тот факт, что в дереве зависимостей путь к этим библиотекам проходит исключительно через узел, объявленный в test scope. Проверено на версиях 15.0 и 16.0.

Или я как-то неправильно понимаю концепцию scope в Maven?
...
Рейтинг: 0 / 0
IntelliJ указывает тестовые зависимости в classpath
    #39404105
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отвечу сам себе. Судя по https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html я понимаю все правильно и для библиотеки, объявленной в test scope, ее transitive зависимости должны тоже восприниматься как объявленные в test scope.
...
Рейтинг: 0 / 0
IntelliJ указывает тестовые зависимости в classpath
    #39404123
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrei TПроблема заключается в том, что при запуске проекта через IntelliJ Run configuration в classpath оказываются compile-зависимости тестовой библиотеки

Это проблема? Т.е. это ломает какую-то логику? Размер дистрибутива не меняется.
Если да- сабмить им баг.
...
Рейтинг: 0 / 0
IntelliJ указывает тестовые зависимости в classpath
    #39404138
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,

Это потенциально может стать проблемой, если возникнет конфликт версий. Размер дистрибутива тоже меняется, если собирать fat jar.

Я бы зафайлил баг, но пока не могу понять, в чем косяк. Пытаюсь воспроизвести проблему на чистом проекте.
...
Рейтинг: 0 / 0
IntelliJ указывает тестовые зависимости в classpath
    #39404362
Andrei T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кому интересно -- все дело в Maven. Воспроизвести можно по ссылке в конце сообщения [1].

Структура проекта (согласно POM):

Код: java
1.
2.
3.
4.
5.
6.
project1
|-- project2:compile
|..|-- jetty-server:compile
|....|-- javax.servlet-api:3.1.0:compile
|-- jersey-test-framework-core:test
|..|-- javax.servlet-api:3.0.1:compile



maven-dependency-plugin (2.8, 2.10, 3.0.0) использует nearest-first стратегию в случае конфликтов и делает вывод, что javax.servlet-api для project1 должен быть версии 3.0.1, несмотря на то, что версия 3.0.1 объявлена в test scope, который не transitive (и с моей т.з. тут никакого конфликта вообще быть не должно) [1]:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
--- maven-dependency-plugin:2.10:tree (default-cli) @ project1 ---
org.example:project1:jar:1.0-SNAPSHOT
+- org.example:project2:jar:1.0-SNAPSHOT:compile
|  \- org.eclipse.jetty:jetty-server:jar:9.3.6.v20151106:compile
|     +- javax.servlet:javax.servlet-api:jar:3.0.1:compile
...
\- org.glassfish.jersey.test-framework:jersey-test-framework-core:jar:2.22.1:test
...
   +- (javax.servlet:javax.servlet-api:jar:3.0.1:compile - scope updated from test; omitted for duplicate)
...



[1] https://github.com/atomashpolskiy/maven-transitive-test-dependencies
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / IntelliJ указывает тестовые зависимости в classpath
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]