Различные области действия одного и того же артефакта и проблемы транзитивных зависимостей - PullRequest
2 голосов
/ 19 января 2012

У меня есть проект A, в котором используется библиотека L v1.0.0 с тестовой областью. Проект A также зависит от проекта B (с компиляцией области), причем B транзитивно зависит от библиотеки L v1.0.0 (с компиляцией области).

Почему конечная область применения библиотеки L для проекта A - «test»? Это вызывает меня NotClassDefFoundError во время выполнения. Похоже, что определение зависимостей проекта A от библиотеки L переопределяет определение транзитивных зависимостей от L.

Что здесь не так? Мой проект A использует только L для модульных тестов, поэтому я определяю зависимость с помощью области «test». Но, в конце, я хочу, чтобы L был на моем пути к классам, так как проект A зависит от проекта B для производства, а B нужна (транзитивно) библиотека L.

Спасибо за помощь

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Вы используете Maven?В этом случае, если я правильно помню, Maven будет использовать «ближайшее» определение для определения фактической области.В этом случае модуль A определяет тест, и переходная область действия от B переопределяется, потому что A является ближайшим, поскольку вы на самом деле находитесь в A :) Это становится более сложным, когда у вас есть несколько модулей с зависимостями между ними.Распространенным решением является определение всех зависимостей (и областей, и версий) в общем родительском Pom.xml в теге <dependencyManagement>.

2 голосов
/ 19 января 2012

В качестве альтернативы предложению Питера, просто оставьте L вне зависимостей для A. У вас все равно должен быть доступ к нему, и Maven будет рассматривать его как compile -области зависимости.

Это скрывает, что тесты А зависят от L, однако.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...