2014-02-18 9 views
3

У меня есть проект А, который компилируется в Java 6. Это зависит от проекта В, который также скомпилированном в Java 6.Переопределение зависимости в зависимости

Рядом с этим, у меня есть два проекта, C-6 и C-7. C-6 - это проект C, скомпилированный в Java 6, а C-7 скомпилирован в Java 7.

Проект B имеет зависимость от проекта C. По умолчанию проект B ссылается на проект C-7, то есть он использует Версия Java 7 проекта C. Существует множество проектов, связанных с проектом B, и все они скомпилированы в Java 7, поэтому здесь нет никаких проблем.

Но теперь у меня есть проект A, который скомпилирован на Java 6. Теперь я хотел бы переопределить зависимость моей зависимости B. Проблема в том, что даже когда я исключаю C-7 в проект A и добавляю зависимость от C-6, момент, когда я вызываю метод в проекте B, он получит класс из C-7. Таким образом, мое приложение выходит из строя, поскольку оно несовместимо.

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

ответ

0

В данной зависимости вы можете использовать тег exclusions для исключения указанных зависимостей. Если затем добавить совместимую зависимость для вашего проекта, то эта библиотека будет находиться в вашем пути к классам, а не в исключенной зависимости. Мы постоянно используем эту функцию для замены журналов регистрации. Однако этот метод имеет ограниченное значение, так как библиотека, которую вы вставляете, должна реализовывать тот же интерфейс, что и библиотека, которую вы вынимаете. Как я уже сказал, это хорошо работает для регистрации, но не очень хорошо для большинства других вещей.

Это будет выглядеть примерно так:

<dependency> 
    <groupId>com.my.company</groupId> 
    <artifactId>B</artifactId> 
    <exclusions> 
     <exclusion>C7</exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>com.my.company</groupId> 
    <artifactId>C6</artifactId> 
</dependency> 
+0

Я понимаю, что. Однако, если вы используете тег exclude и include в проекте B для включения/исключения C-6, проект A имеет доступ к функциям C-6, но когда вы вызываете метод в проекте B, он вызывается методом C-7 , Я объяснил это и в своем посте. – Joetjah

+0

Можете ли вы объяснить это немного больше, так как я немного смущен. Насколько я понимаю: у вас есть A -> B -> C7, и вы хотите A -> B -> C6. Итак, если вы делаете A -> C6 & A -> B x-> C7, тогда это должно исключить C7 из пути к классам и поместить C6 в путь к классам. (-> - зависимость, а х -> - исключение). Таким образом, исключение распространяется на зависимость B в A, а не на A, и это то, о чем я думаю, ваш вопрос. –

+0

Не совсем. Вы правильно заявляете, что я хочу. Но проблема в том, что я не могу исключить что-либо в B. Если я не могу что-то сделать с профилями (по умолчанию) или что-то в этом роде. Дело в том, что я работаю над проектом A. Существуют также команды, работающие над W, X, Y, Z, .., все они одинаковы с точки зрения иерархии зависимостей (также клиентов) как проект A. Поэтому я могу " t просто исключить в проекте B, потому что это сломает все другие приложения. – Joetjah

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