Исключить классы из зависимости в Maven - PullRequest
12 голосов
/ 02 июля 2010

У меня есть проект, который зависит от артефакта, который контролируется поставщиком. Этот артефакт содержит некоторые классы, от которых я зависит, и некоторые классы, которые старше и вызывают проблемы. Есть ли способ заставить maven автоматически расширять jar, удалять классы и переупаковывать их как зависимость? Я постараюсь привести пример.

supplier:artifact:1.0.0
com.supplier.useful.ClassA
com.supplier.dto.ClassB (old)

us:dependency:1.1.20
com.supplier.dto.ClassB (new)

us:project-web:1.1.20
- supplier:artifact:1.0.0
- us:dependency:1.1.20

Итак - мне нужно использовать ClassA в Project-Web, но мне нужно использовать ClassB из dependency артефакта. Я не могу изменить поставщика: артефакт или нас: зависимость.

Есть идеи?!

Ответы [ 2 ]

9 голосов
/ 02 июля 2010

Начиная с версии 2.0.9 maven сохраняет порядок пути к классам, поэтому, если вы определите свои пропатченные классы в банке ПЕРЕД банкой поставщика, она скрывает реализацию поставщика.

В качестве альтернативы вы можете взглянуть на mavenплагин Shade , как он делает именно то, что вы спрашиваете, по мне.

5 голосов
/ 02 июля 2010

Если вы используете Maven 2.0.9+, просто поместите свой класс в банку и объявите его как зависимость перед артефактом от вашего поставщика. Как упомянуто @Peter, Maven использует порядок pom для пути к классам начиная с Maven 2.0.9 (см. MNG-1412 / MNG-3111 ).

Если по какой-либо причине вы не удовлетворены этим решением, то вы можете использовать Плагин Maven Dependency для распаковки зависимости в target/classes (который должен быть на пути к классам компиляции), используя dependency:unpack с некоторыми excludes (см. Распаковка определенных артефактов ). Я бы даже не пытался упаковать его, это создаст бесполезную сложность (замена старого jar-файла новым на пути к классам компиляции не будет тривиальной, если это возможно).

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