Импорт пакетов Eclipse в Maven: как отобразить версии? - PullRequest
4 голосов
/ 20 марта 2011

Я работаю над Project Dash, в частности над набором инструментов для импорта пакетов Eclipse (например, org.eclipse.swt.gtk.linux.x86_64_3.6.2.v3659b.jar) в репозиторий Maven 2. Мы запустили инструменты на выходных и вот результат: тестируемый репозиторий Maven 2, содержащий большую часть Eclipse 3.6.2 .

Во время преобразования мы столкнулись с проблемой без простого решения: большинство пакетов Eclipse либо не запрашивают конкретную версию, либо запрашивают диапазон версий . Итак, у нас есть оба:

Require-Bundle: org.eclipse.core.runtime

и

Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)"

Во время преобразования инструменты собирают все версии всех комплектов, и если нам нужно написать POM для верхнего примера, мы выписываем собранную нами версию (в данном примере это 3.6.2). В нижнем регистре мы оставляем диапазон версий в покое. Пока проблем нет.

Теперь выходит новая версия, скажем, 3.7. Когда мы конвертируем это, создается новая версия 3.7.0 первого POM, и она получает зависимость к org.eclipse.core:org.eclipse.core.runtime:3.7.0, а вторая создается с тем же диапазоном версий, что и раньше.

Примечание. Теперь у нас есть четыре POM (два для 3.6.2 и два для 3.7). Один зависит от core.runtime 3.6.2, один на 3.7.0 и два имеют диапазон версий [3.2.0,4.0.0)

Это опубликовано, и вы ничего не меняете на своей стороне. Вы не обновляетесь до 3.7.0 !

Теперь у нас есть проблема: если вы используете эти два артефакта с версией 3.6.2 в своей сборке, то первый будет по-прежнему использовать ядро ​​времени выполнения 3.6.2, так как его версия заблокирована.

Но второй обновит метаданные Maven и увидит «о, у нас тоже есть 3,7 для этого», скачайте их и взорвитесь, в итоге вы получите org.eclipse.core:org.eclipse.core.runtime:3.7 и org.eclipse.core:org.eclipse.core.runtime:3.6.2 в вашем classpath без каких-либо изменений на вашей стороне .

Это плохо. Как мы должны решить это?

1 Ответ

1 голос
/ 15 апреля 2011

Что ж, у вас не будет 3.7 и 3.6.2 в вашем пути к классам - Maven выберет самую высокую версию, поэтому вы обновитесь до 3.7 (что, вероятно, не то, чего хочет пользователь Eclipse Maven, илижелания).

Учитывая, что (насколько мне известно) Eclipse выпускает все свои компоненты одновременно, нельзя просто игнорировать диапазон версий пакета (из второго примера) и жестко задавать зависимость версии оттекущий выпуск (как вы делаете для первого примера)?

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