null

Сборка плагинов для Liferay в Ubuntu без использования IDE

Существует достаточно широкий набор инструментов разработки плагинов для Liferay Portal. "Каноническим" вариантом является связка Liferay Plugins SDK + Liferay IDE (основанная на Eclipse), но возможны и другие варианты - например, Maven + NetBeans. Тем не менее, достаточно часто возникает необходимость собрать плагин для Liferay, не запуская IDE (т.е. используя только командную строку). В этой заметке я рассмотрю решение этой задачи под своим рабочим окружением - сейчас это Ubuntu 13.04, но, скорее всего, она может оказаться полезной и для пользователей других операционных систем.

Исходные данные

Итак, мы имеем исходники некоего плагина для Liferay, которые нам нужно собрать в war-файл, используя только возможности командной строки. Вообще говоря, вариантов структурной организации таких исходников множество, но здесь мы предположим наиболее часто встречающийся вариант - проект для Liferay Plugins SDK. В реальной жизни практически любые исходники плагина для Liferay можно преобразовать в такой проект, так что все остальные ситуации после более или менее продолжительного шаманства можно свести к описываемой здесь.

Тех. процесс

Для начала установим Ant и Liferay Plugins SDK. Первый ставится стандартным образом:

jek@jek-laptop:~$ sudo apt-get install ant

SDK достаточно просто скачать отсюда и распаковать в удобный нам для сборки каталог. Теперь, для того, чтобы всё собиралось, нужно установить Liferay нужной нам версии. Простейший вариант - скачать бандл на базе Apache Tomcat и распаковать его в тот же самый "сборочный" каталог. После того, как портал скачан и установлен, надо поправить конфигурационные файлы SDK:

jek@jek-laptop:~/work/liferay-plugins-sdk-6.1.1$ cat build.properties 
app.server.portal.dir = /home/jek/work/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27/webapps/ROOT
app.server.lib.global.dir = /home/jek/work/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27/lib/ext
app.server.deploy.dir = /home/jek/work/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27/webapps
app.server.type = tomcat
app.server.dir = /home/jek/work/liferay-portal-6.1.1-ce-ga2/tomcat-7.0.27/
javac.encoding=UTF-8

По идее, это должно быть всё :)

Сборка плагина и сопутствующее шаманство

Теперь помещаем наш плагин в соответствующий его сути каталог SDK. Если это портлет, то кладём его в каталог portlets, если хук - то hooks и т.д. Пробуем собрать:

jek@jek-laptop:~/work/liferay-plugins-sdk-6.1.1/portlets/my-sample-portlet$ ant war
Buildfile: /home/jek/work/liferay-plugins-sdk-6.1.1/portlets/my-sample-portlet/build.xml
     [copy] Copying 1 file to /usr/share/ant/lib

BUILD FAILED
/home/jek/work/liferay-plugins-sdk-6.1.1/portlets/my-sample-portlet/build.xml:5: The following error occurred while executing this line:
/home/jek/work/liferay-plugins-sdk-6.1.1/portlets/build-common-portlet.xml:7: The following error occurred while executing this line:
/home/jek/work/liferay-plugins-sdk-6.1.1/build-common-plugin.xml:5: The following error occurred while executing this line:
/home/jek/work/liferay-plugins-sdk-6.1.1/build-common.xml:68: Failed to copy /home/jek/work/liferay-plugins-sdk-6.1.1/lib/ecj.jar to /usr/share/ant/lib/ecj.jar due to java.io.FileNotFoundException /usr/share/ant/lib/ecj.jar (Отказано в доступе)

Total time: 1 second

Ужос, всё упало! Ничего страшного, ставим компилятор ECJ:

jek@jek-laptop:~/work/liferay-plugins-sdk-6.1.1/portlets/my-sample-portlet$ sudo apt-get install ecj

Проверяем наличие файла в библиотеках Ant'а:

jek@jek-laptop:~/work/liferay-plugins-sdk-6.1.1/portlets/my-sample-portlet$ ls /usr/share/ant/lib/
ant-antlr.jar            ant-apache-xalan2.jar    ant-jsch.jar
ant-apache-bcel.jar      ant-commons-logging.jar  ant-junit4.jar
ant-apache-bsf.jar       ant-commons-net.jar      ant-junit.jar
ant-apache-log4j.jar     ant.jar                  ant-launcher.jar
ant-apache-oro.jar       ant-javamail.jar         ant-swing.jar
ant-apache-regexp.jar    ant-jdepend.jar          ant-testutil.jar
ant-apache-resolver.jar  ant-jmf.jar              junit.jar

Его там нет. К счастью, у нас есть гугл, который находит вот такой совет. Следуем предложенной рекомендации и пробуем пересобрать плагин:

jek@jek-laptop:~/work/liferay-plugins-sdk-6.1.1/portlets/my-sample-portlet$ sudo ln -s /usr/share/java/ecj.jar /usr/share/ant/lib/ecj.jar 
jek@jek-laptop:~/work/liferay-plugins-sdk-6.1.1/portlets/my-sample-portlet$ ant war
Buildfile: /home/jek/work/liferay-plugins-sdk-6.1.1/portlets/my-sample-portlet/build.xml

compile:

(...)

clean-portal-dependencies:
      [zip] Building zip: /home/jek/work/liferay-plugins-sdk-6.1.1/dist/my-sample-portlet-6.1.1.1.war

BUILD SUCCESSFUL
Total time: 34 seconds

Ура! Всё заработало!

Коротко о себе:

Работаю ведущим программистом в компании Tune IT и ассистентом кафедры Вычислительной техники в Университете ИТМО .

Занимаюсь проектами, связанными с разработкой разного рода веб-приложений (порталы, CRM-системы, системы электронного документооборота), а также, в рамках научной работы на кафедре, изучаю возможности применения семантического анализа в задачах САПР.