понедельник, 22 марта 2010 г.

Дистрибутив Erlang в хранилище Maven

Для начала необходимо получить дистрибутив Erlang для целевой системы в виде артефакта. Erlang уже присутствует в хранилищах пакетов для многих дистрибутивов Linux, но может содержать патчи значительно усложняющие мобильность дистрибутива. Для этого примера я собрал "чистый" экземпляр основанный на исходных кода с офф. сайта http://www.erlang.org/download.html


$ ./configure --prefix=/tmp/erlang
$ make install
$ cd /tmp/erlang/lib/erlang/

Архиватор используемый Maven по умолчанию некорректно распаковывает ссылки из tar.gz. Для распаковки можно воспользоваться Exec Maven Plugin или не включать их в архив. Ссылка будет создана при вызове скрипта Install, так что я ее просто удаляю.

$ rm ./bin/epmd

Потом архивирую всю директорию и деплою получившийся архив в свое хранилище.

$ tar -czf ../erlang-R13B4-linux_x86_64.tar.gz ./
$ mvn deploy:deploy-file -DartifactId=erlang-otp -Dpackaging=tar.gz \
-DgroupId=local.test.erlang.linux-x86-64 -Dversion=R13B4 \
-Dfile=../erlang-R13B4-linux_x86_64.tar.gz \
-Durl=http://beast-server/nexus/content/repositories/releases \
-DrepositoryId=releases


Подключение не составляет проблемы, но развертывание дистрибутива Erlang будет производиться каждый раз при прохождении фазы обработки ресурсов. Что бы дистрибутив разворачивался только один раз, операции относящиеся к развертыванию можно вынести в профиль, который активируется основываясь на отсутствии файлов. Подробности о профилях Maven можно узнать из Introduction to Build Profiles.



4.0.0
local.erlang.test
test-erlang-maven
erlang-otp
1.0-SNAPSHOT
A custom Erlang project
http://www.myorganization.org



local.test.erlang.linux-x86-64
erlang-otp
R13B4
tar.gz
compile






net.sf.maven-erlang
erlang-plugin
true



${project.build.directory}/erlang



true



true



false







true





true














net.sf.maven-erlang
erlang-plugin










maven-surefire-report-plugin





setup_erlang_dist


target/erlang/Install





org.apache.maven.plugins
maven-dependency-plugin


unpack-erlang-dist
process-resources

unpack




local.test.erlang.linux-x86-64
erlang-otp
R13B4
tar.gz
false

${project.build.directory}/erlang








org.codehaus.mojo
exec-maven-plugin
1.1


configure-erlang-dist
process-resources

exec


${project.build.directory}/erlang/Install

-sasl
${project.build.directory}/erlang












Теперь можно проверить работу:

$ mvn package

При первом запуске будет развернут дистрибутив Erlang, что потребует некоторое время. При последующих запусках дистрибутив Erlang уже будет существовать и они будут выполняться гораздо быстрее.

Итог: Дистрибутив Erlang добавлен в хранилище артефактов как артефакт и доступен любому хосту использующему это хранилище. Дистрибутив Erlang может быть подключен к проекту и развернут при необходимости. Кроме распаковки можно так же произвести дополнительную настройку используя, к примеру, Exec Maven Plugin.

Комментариев нет: