Зависимости Maven не имеют порядка , но предоставляют концепцию областей действия .
Так что вам нужно сделать, использовать области для построения правильныхнабор зависимостей для:
- время компиляции
- время выполнения на сервере: (используйте, например,
provided
для зависимостей, которые необходимы во время компиляции, но будут предоставлены сервером,поэтому ваше приложение содержит / не должно их содержать - время тестирования: используйте область действия
test
, чтобы добавить зависимости, которые нужны только для тестирования (например, junit)
В вашем специальномв этом случае похоже, что библиотека интерфейса javax.validation недоступна в тестах. Пусть они не включены в javaee-api
. Если это так, добавьте:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
<scope>test</scope>
</dependency>
Но будьте осторожны , ваше объяснение о том, что входит в состав сервера, и описанное поведение звучит для меня странно. - Я рекомендую дважды проверить, что предоставляет сервер и что включает javaee-api
ретранслятор. Но могу я это сделать?неправильно иjavax.validation
требуется только для явного теста
Причина, по которой проблема возникает только при включении javaee-api
, может заключаться в том, что проверка Javax иногда включается только тогда, когда реализация доступна вclasspath.
Порядок зависимости имеет значение в некоторых случаях.«Проблема» заключается в том, что если на библиотеку / зависимость ссылаются в двух местах (прямая и неопределенная) и версия обеих ссылок на одну и ту же библиотеку отличается, Maven должен решить, какую версию использовать.
Перваяи наиболее важным критерием является глубина ссылки в дереве зависимостей.Если вы ссылаетесь на библиотеку непосредственно в вашем проекте POM, то это будет доминировать над всеми остальными.Если на библиотеку ссылается непосредственно библиотека, на которую ссылаются непосредственно вы, тогда это будет доминировать над всеми остальными, если есть еще одно косвенное указание.
Но в случае, когда две ссылки (на одну и ту же библиотеку в разных версиях)в той же глубине дерева зависимостей победит первое.( подробнее ).
Прежде всего,