Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Статья] Использование TYCHO, сборка Eclipse Plugin и RCP с maven 
:(
    Опции темы
fixxer
Дата 11.11.2009, 02:22 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 1
Всего: 27



Не так давно передо мной встала задача интегрировать сборку Eclipse плагинов и Eclipse RCP приложений в Hudson. Идеальным вариантом стал бы набор maven-плагинов. После непродолжительного гугления я нашел инструмент, разрабатываемый командой m2eclipse, который называется TYCHO. Сразу нужно сказать, что текущее состояние это глубокая пре-альфа. Например, для работы требуется maven-3.0, который тоже еще альфа. Поэтому текущая версия (0.4.0-DEV) распространяется вместе со встроенным допиленым maven-3.0-SNAPSHOT. (В версии 0.5.0-DEV обещают разделить, то есть можно будет пользоваться отдельным maven-3.0-SNAPSHOT и TYCHO как набором maven-плагинов, как оно собственно и задумывалось.) Состояние документации тоже пока плачевно: средняя дата статей на wiki - весна этого года и полнота их оставляет желать лучшего. Однако, с помощью лома, гугла и такой-то матери мне удалось приспособить TYCHO для своих нужд.

Итак, скачиваем последний development release, распаковываем и меняем переменную окружения M2_HOME на распакованную папку. Мавен у нас теперь будет жить там. Проверяем:

Код

user@user-desktop:~/tycho-example-workspace$ mvn --version
Apache Maven 3.0-TYCHO-818442 (r818615; 2009-09-25 01:00:12+0400)
Java version: 1.6.0_10
Java home: /home/user/jdk1.6.0_10/jre
Default locale: ru_RU, platform encoding: UTF-8
OS name: "linux" version: "2.6.24-24-generic" arch: "amd64" Family: "unix"


Далее, создадим два плагина из стандартных темплейтов: один Hello, World Command, другой Hello RCP, в котором пропишем зависимость от первого. Позволю себе не описывать эту процедуру. За подробностями можно обратиться, например, сюда. В результате должно получиться, например, такое:

Код

user@user-desktop:~/tycho-example-workspace$ tree -I target fixxer.test.tycho/
fixxer.test.tycho/
|-- fixxer.test.tycho.plugin
|   |-- META-INF
|   |   `-- MANIFEST.MF
|   |-- build.properties
|   |-- icons
|   |   `-- sample.gif
|   |-- plugin.xml
|   `-- src
|       `-- main
|           `-- java
|               `-- fixxer
|                   `-- test
|                       `-- tycho
|                           `-- plugin
|                               |-- Activator.java
|                               `-- handlers
|                                   `-- SampleHandler.java
`-- fixxer.test.tycho.rcp.plugin
    |-- META-INF
    |   `-- MANIFEST.MF
    |-- build.properties
    |-- icons
    |   |-- alt_about.gif
    |   |-- alt_launcher.icns
    |   |-- alt_launcher.ico
    |   |-- alt_launcher.xpm
    |   |-- alt_window_16.gif
    |   `-- alt_window_32.gif
    |-- plugin.xml
    |-- splash.bmp
    `-- src
        `-- main
            `-- java
                `-- fixxer
                    `-- test
                        `-- tycho
                            `-- rcp
                                `-- plugin
                                    |-- Activator.java
                                    |-- Application.java
                                    |-- ApplicationActionBarAdvisor.java
                                    |-- ApplicationWorkbenchAdvisor.java
                                    |-- ApplicationWorkbenchWindowAdvisor.java
                                    `-- Perspective.java

                                    
Далее начнем прикручивать TYCHO.

1. Создадим родительский/контейнерный pom

Код

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>fixxer.test.tycho</groupId>
  <artifactId>parent</artifactId>
  <packaging>pom</packaging>
  <name>Tycho Test</name>
  <version>0.0.1-SNAPSHOT</version>
  
  <modules>
    <module>fixxer.test.tycho.plugin</module>
    <module>fixxer.test.tycho.rcp.plugin</module>
  </modules>
  
  <repositories>
   <repository>
     <id>ganymede</id>
     <layout>p2</layout>
     <url>http://download.eclipse.org/releases/ganymede</url>
   </repository>
  </repositories>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.tycho</groupId>
        <artifactId>target-platform-configuration</artifactId>
        <configuration>
          <resolver>p2</resolver>
        </configuration>
      </plugin>
    </plugins>
  </build>
  
</project>


Обратите внимание, TYCHO может разрешать зависимости из репозитория Eclipse.

2. Создадим pom'ы для модулей

Код

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>fixxer.test.tycho</groupId>
    <artifactId>plugin</artifactId>
    <packaging>eclipse-plugin</packaging>
    <name>Tycho Test Plugin</name>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>fixxer.test.tycho</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

</project>


Код

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>fixxer.test.tycho</groupId>
    <artifactId>fixxer.test.tycho.rcp.plugin</artifactId>
    <packaging>eclipse-plugin</packaging>
    <name>Tycho Test RCP Plugin</name>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>fixxer.test.tycho</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

</project>


3. 
Код

user@user-desktop:~/tycho-example-workspace/fixxer.test.tycho$ mvn clean install


  Ждем, пока TYCHO скачает интернет зависимости...
  
Код

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Tycho Test ........................................ SUCCESS [2.107s]
[INFO] Tycho Test Plugin ................................. SUCCESS [8.730s]
[INFO] Tycho Test RCP Plugin ............................. SUCCESS [1.079s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------


Получите, распишитесь - собранные плагины в target'ах и в локальном репозитории.

Заметьте, зависимости от плагинов не нужно прописывать в pom, TYCHO прекрасно понимает Require-Bundle из манифеста, как впрочем и другие OSGi аттрибуты.

Если вы разрабатываете чистые плагины, без RCP, то на этом можно и закончить. Но победа будет неполной, если мы не соберем RCP product.
Итак, делаем еще один модуль, создаем там Product Configuration и pom.

Код

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>fixxer.test.tycho</groupId>
    <artifactId>app</artifactId>
    <packaging>eclipse-application</packaging>
    <name>Tycho Test Product</name>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>fixxer.test.tycho</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.tycho</groupId>
                <artifactId>maven-osgi-packaging-plugin</artifactId>
                <configuration>
                    <environments>
                        <environment>
                            <os>linux</os>
                            <ws>gtk</ws>
                            <arch>x86</arch>
                        </environment>
                    </environments>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>


Код

user@user-desktop:~/tycho-example-workspace/fixxer.test.tycho$ tree -I target fixxer.test.tycho.app/
fixxer.test.tycho.app/
|-- app.product
`-- pom.xml


Добавляем модуль в реактор. Собираем. И... Ловим незакрытый баг.

Что делать? Можно подождать, когда баг закроют. Можно попробовать закрыть его самому. А можно использовать следующий workaround.
Качаем RCP-SDK + Delta pack. Я использовал эту запись в блоге. Сливаем их, добавляем необходимые плагины (мне пришлось добавить org.eclipse.core.runtime.compatibility.registry).

Код

user@user-desktop:~/tycho-example-workspace/fixxer.test.tycho$ mvn -Dtycho.targetPlatform=/path/to/sdk clean install

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Tycho Test ........................................ SUCCESS [0.509s]
[INFO] Tycho Test Plugin ................................. SUCCESS [3.014s]
[INFO] Tycho Test RCP Plugin ............................. SUCCESS [0.965s]
[INFO] Tycho Test Product ................................ SUCCESS [1.540s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------


Код

user@user-desktop:~/tycho-example-workspace/fixxer.test.tycho$ tree fixxer.test.tycho.app/target/
fixxer.test.tycho.app/target/
|-- app-0.0.1-SNAPSHOT-linux.gtk.x86_64.zip
|-- app.product
`-- linux.gtk.x86_64
    `-- eclipse
        |-- configuration
        |   `-- config.ini
        |-- launcher
        |-- libcairo-swt.so
        `-- plugins
            |-- com.ibm.icu_3.8.1.v20080530.jar
            |-- fixxer.test.tycho.plugin_1.0.0.jar
            |-- fixxer.test.tycho.rcp.plugin_1.0.0.jar
            |-- org.eclipse.core.commands_3.4.0.I20080509-2000.jar
            |-- org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar
            |-- org.eclipse.core.databinding_1.1.1.M20080827-0800b.jar
            |-- org.eclipse.core.expressions_3.4.0.v20080603-2000.jar
            |-- org.eclipse.core.jobs_3.4.0.v20080512.jar
            |-- org.eclipse.core.runtime.compatibility.registry_3.2.200.v20080610
            |   |-- META-INF
            |   |   |-- ECLIPSE.RSA
            |   |   |-- ECLIPSE.SF
            |   |   |-- MANIFEST.MF
            |   |   `-- eclipse.inf
            |   |-- about.html
            |   |-- fragment.properties
            |   `-- runtime_registry_compatibility.jar
            |-- org.eclipse.core.runtime_3.4.0.v20080512.jar
            |-- org.eclipse.equinox.app_1.1.0.v20080421-2006.jar
            |-- org.eclipse.equinox.common_3.4.0.v20080421-2006.jar
            |-- org.eclipse.equinox.launcher.gtk.linux.x86_64_1.0.101.R34x_v20080731
            |   |-- META-INF
            |   |   |-- ECLIPSE.RSA
            |   |   |-- ECLIPSE.SF
            |   |   |-- MANIFEST.MF
            |   |   `-- eclipse.inf
            |   |-- about.html
            |   |-- eclipse_1115.so
            |   `-- launcher.gtk.linux.x86_64.properties
            |-- org.eclipse.equinox.launcher_1.0.101.R34x_v20080819.jar
            |-- org.eclipse.equinox.preferences_3.2.201.R34x_v20080709.jar
            |-- org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar
            |-- org.eclipse.help_3.3.101.v20080702_34x.jar
            |-- org.eclipse.jface.databinding_1.2.1.M20080827-0800a.jar
            |-- org.eclipse.jface_3.4.1.M20080827-2000.jar
            |-- org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
            |-- org.eclipse.swt.gtk.linux.x86_64_3.4.1.v3449c.jar
            |-- org.eclipse.swt_3.4.1.v3449c.jar
            |-- org.eclipse.ui.workbench_3.4.1.M20080827-0800a.jar
            `-- org.eclipse.ui_3.4.1.M20080910-0800.jar

            
В заключение рекомендую исходники TYCHO. Там в тестах много примеров.            



--------------------
user posted image
PM MAIL ICQ   Вверх
COVD
Дата 11.11.2009, 14:08 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 6
Всего: 43



fixxer, а что это за "нанотехнология" такая? Для чего, для кого. Хотя бы несколько строк перед началом статьи не повредят. 
PM MAIL   Вверх
fixxer
Дата 11.11.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 1
Всего: 27



Цитата(COVD @ 11.11.2009,  14:08)
fixxer, а что это за "нанотехнология" такая? Для чего, для кого. Хотя бы несколько строк перед началом статьи не повредят.

Какая именно технология не понятна? Eclipse Plugin, Eclipse RCP, maven?

Просто статья в основном расчитана на тех кто пишет плагины под Eclipse или Eclipse RCP приложения. Если что-то нужно поподробнее расписать - скажите что.

Это сообщение отредактировал(а) fixxer - 11.11.2009, 14:18


--------------------
user posted image
PM MAIL ICQ   Вверх
COVD
Дата 13.11.2009, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 6
Всего: 43



Плагины и Эклипс конечно на слуху. Но вы же описываете победу над "глубокой пре-альфа" какого-то TYCHO, упомянули какой-то Hudson. Пришлось лезть в wiki. smile   
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java tools & IDE's | Следующая тема »


 




[ Время генерации скрипта: 0.0684 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.