В одном из наших Eclipse-проектов сборка происходит следующим образом:
1. Сначала мы собираем target-платформу для системы
uDig (user-friendly Internet GIS) - набор OSGi-bundles. Состоит она из:
Сборка GeoAPI и GeoTools выпоняется с помощью
Apache Maven, который автоматически скачивает нужные зависимости с прописанных репозиториев, запускает компилятор, генерирует MANIFEST.MF для OSGi-бандлов - короче, делает все. В результате мы имеем папку с набором JAR-файлов примерно следующего содержания:
...
java3d.osgi.vecmath
-1.3.1.jar
javax.media.jai.osgi.jai_imageio
-1.1.0.jar
net.opengis.ows-2.6.0
-SNAPSHOT.jar
...
Эта папка - не что иное, как target platform для компиляции uDig, которая делается через PDE.
2. Мы запускаем Eclispe PDE batch build и компилируем uDig. В результате мы получаем продукт uDig, в папке plugins которого, среди прочих, оказываются уже такие файлы:
...
java3d.osgi.vecmath
_1.3.1.jar
javax.media.jai.osgi.jai_imageio
_1.1.0.jar
net.opengis.ows_2.6.0_SNAPSHOT.jar
...
Первый вывод уже очевиден:
Maven использует "-" (дефис) для отделения номера версии от имени бандла, в то время как PDE использует для этого "_" (подчеркивание)
3. Для того, чтобы собрать наш проект, нам нужна платформа в составе:
- OSGi-бандлы из папки plugins системы uDig
- наши проприетарные модули и их зависимости
Причем сборка второго пункта также выполняется с помощью Maven. Соответственно, нам очень удобно использовать модули, уже находящиеся в локальном m2-репозитории - такие, как, например, java3d.osgi.vecmath
-1.3.1.jar. Однако, когда мы пытаемся добавить к нашим плагинам плагины из uDig, начинаются проблемы, поскольку в uDig, как мы помним, соответствующая библиотека называется уже java3d.osgi.vecmath
_1.3.1.jar (подчеркивание вместо дефиса). Поэтому в результате простого копирования файлов получаем следующую картину:
...
java3d.osgi.vecmath
_1.3.1.jar
java3d.osgi.vecmath
-1.3.1.jar
javax.media.jai.osgi.jai_imageio
_1.1.0.jar
javax.media.jai.osgi.jai_imageio
-1.1.0.jar
net.opengis.ows_2.6.0_SNAPSHOT.jar
net.opengis.ows_2.6.0-SNAPSHOT.jar
...
Т.е. набор идентичных по смылу OSGi-бандлов, но продублированных в файлах с разными именами.
Пока что, чтобы решить эту проблему, я стал используюVBS-скрипт, который переименовывает файлы по заданному регулярному выражению с тем, чтобы заменить подчеркивание на дефис. Хотя, наверное, нужно делать это прямо в PDE-сборке и заменять наоборот - дефис на подчеркивание...
А
война дефиса и подчеркивания, между прочим, разгорелась нешуточная. В мейл-листах Maven утверждают, что единственно верный разделитель - это дефис. Эклипс пока что понимает только подчеркивание, хотя в 3.5
обещают это исправить (в 3.5 М4, вроде, уже вставили соответствующий патч).