2013-12-06 3 views
0

У меня есть несколько слоев модуля, которые зависят друг от друга.Зависимость от Maven в профиле не проходит?

Скажем Модуль А В1 В2 компакт

В1 зависит от А, и В2 зависит от

С зависит от А (может быть покинуть, и наследует зависимость от B1/B2) и, кроме того либо зависит от B1 с активным профилем 1 или B2 с активным профилем 2.

и D зависит от C, D делает упаковку для сборки окончательного баночку

Если в файле двойки пом, я не пишу профиль, я просто сделать это зависит от C. Тогда зависимость: дерево с либо указанный профиль будет только показывать, что он зависит от A и C. И последняя банка не будет включать ни B1, ни B2.

Не должен ли он включать B1 или B2, как это было для A? в противном случае мне нужно скопировать то, что я пишу на C (скажем, этот профиль в D), чтобы включить B1 или B2

Итак, если я хочу только иметь профиль, написанный на C (так как это C, которому нужно беспокоиться используя B1 или B2), а также в других модулях, которые зависят от C, я не хочу, чтобы они беспокоились о том, какой B использовать, поскольку это уже должно было заботиться C. Как мне это сделать?

ответ

0

Вы можете заставить C зависеть только от B1 или B2, а A будет зависеть от их зависимости. Что касается вашего вопроса, я думаю, что зависимость: дерево выглядит только через зависимости в <dependencies> блоке, а не в профилях.

Кроме того, я думаю, что профили не могут быть унаследованы. Таким образом, вы можете добавить в C обе зависимости от B1 и B2, но исключить одну из них в D при написании зависимости от С.

обновление: Я думаю, вы понимаете идею профилей неправильных. Профиль в pom.xml только build профиль. Если вы добавляете зависимости в профиль, это означает, что эта зависимость добавляется только в эту сборку. Например, вы создаете приложение для сервера приложений, у которого нет библиотеки, которую имеют другие серверы. Таким образом, вы добавляете эту библиотеку в зависимость от этой сборки в профиле.

В вашем конкретном случае, если C не может работать без одного из B, ваш должен предоставить один из них в блоке <dependencies> не только в профиле. Например, 1) вы можете добавить зависимость от B1, а в профиле - переписать его на B2. Таким образом, у вас будет B1 по умолчанию и B2 в профиле. 2) Или вы можете добавить зависимость от B без версии и указать версии в двух профилях.

В первом случае в D вы увидите зависимость от B1, и вы можете обеспечить зависимость от B2 в профиле (да, в этом случае вам нужно скопировать эту часть с C). Во втором случае вы также увидите зависимость от B без версии (maven найдет ее), и вы можете указать версию в профилях (и да, вы также должны скопировать).

p.s. вы также можете проверить опционально и исключить http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

p.p.s. Кроме того, maven поддерживает глобальные профили и профили пользователей, но я не знаю, разрешены ли там <dependencies>.

+0

Да, я знаю, что я могу оставить A в помпе C. Тогда как решить эту проблему? он фактически не включает B1 или B2 в финальной сборной упаковке. не только зависимость: дерево не показывает их. – Raymond

+0

Я обновил свой ответ, постараюсь добавить обе зависимости, а затем исключить одну из них по вашим потребностям. – arghtype

+0

Спасибо, я вижу. в то время как если D не наследуется от C. говорят автономный проект. когда это зависит от C, ему нужно знать, что исключить? мне кажется, что B1 или B2 - это только вопрос C. другие модули зависят от C, не должны знать детали? – Raymond

Смежные вопросы