25.09.2013
Добрый день, читатели!
Сегодня продолжил создавать приложение на основе Eclipse RCP. Сегодня сделаем фичу (feature). Фича – это компонент rcp который может быть отдельно установлен в Eclipse, в том числе в тот, под которым вы его разрабатываете. В дальнейшем нам этот компонент понадобится чтобы создать пакет приложения и сайт апдейтов.
Работу будем продолжать в уже созданном нами проекте. Создадим проект фичи, для этого File > New > Other … > Plug-in Development > Feature Project.

Заполним необходимые поля. Обязательно убедитесь в том, что проект находится в каталоге родительского проекта в отдельной папке, в нашем случае это папка feature. Дальше мы будем использовать имя этой папки кое где.

Выберем созданный нами в предыдущей статье плагин:

Далее преобразуем полученный проект в проект Maven’а. Правой кнопкой мыши на проекте, Configure > Convert to Maven Project. Далее не забываем, что настройки артефакта maven’а должны совпадать с настройками в билде эклипса. Кроме того, обратите внимание на packaging type, он должен быть eclipse-feature.

pom.xml проекта должен выглядеть примерно следующим образом. Ссылку на родительский проект необходимо вписать руками.
<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/xsd/maven-4.0.0.xsd" >
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>ru.mrdekk.ercp</groupId>
<artifactId>ru.mrdekk.ercp.parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<artifactId>ru.mrdekk.ercp.feature</artifactId>
<packaging>eclipse-feature</packaging>
<name>mrdekk.ru eclipse rcp demo - feature</name>
</project>
Теперь пропишем в родительском проекте этот проект в качестве модуля для того, чтобы он собирался при сборке всего проекта. Секция modules в родительском проекте должна выглядеть примерно следующим образом:
<modules>
<module>gui</module>
<module>feature</module>
</modules>
После этого попробуем собрать проект. Должно получится примерно следующее:
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] mrdekk.ru eclipse rcp demo - parent ............... SUCCESS [0.109s]
[INFO] mrdekk.ru eclipse rcp demo - gui .................. SUCCESS [2.953s]
[INFO] mrdekk.ru eclipse rcp demo - feature .............. SUCCESS [0.109s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.171s
[INFO] Finished at: Wed Sep 25 10:47:53 NOVST 2013
[INFO] Final Memory: 14M/35M
[INFO] ------------------------------------------------------------------------
В следующий раз настроим сборку продукта и сайта апдейтов.
23.09.2013
Итак. Намедни потребовалось создать eclipse rcp приложение на платформе Kepler. Положение осложнялось тем, что сборку надо было проводить с использованием maven’а. Ввиду того, что платформа kepler (4.3) достаточно новая и в ней было много всего переделано, информации по ней – кот наплакал. Поэтому пришлось подключать лом и чью-то матерь. Но в итоге все получилось. Методику этого получилось я и постараюсь описать тут.
Начнем с того, что у Вас должен быть установлен eclipse последней версии, в нем должен быть настроен maven и инструменты для разработки eclipse rcp. Я использовал для этого Spring ToolSuite, в котором мавен уже есть из коробки, а eclipse rcp tools легко ставятся через Install New Software. Методику этого всего я тут описывать не буду – материала навалом даже на русском языке.
Для начала создадим родительский проект для мавена – File > New > Maven Project.

Затем настроим основные вещи

pom.xml будет выглядеть следующим образом
<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/xsd/maven-4.0.0.xsd" >
<modelVersion>4.0.0</modelVersion>
<groupId>ru.mrdekk.ercp</groupId>
<artifactId>ru.mrdekk.ercp.parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>mrdekk.ru eclipse rcp demo - parent</name>
</project>
Для дальнейшего прогресса необходимо добавить некоторые вещи. Для начала – настройки, пока только версия tycho – инструмента для сборки rcp проектов maven’ом. Все это добавляем в pom.xml:
<properties>
<tycho-version>0.18.1</tycho-version>
</properties>
Теперь добавим репозиторий eclipse rcp который нужен будет maven’у и tycho для получения артефактов:
<repositories>
<repository>
<id>eclipse-platform</id>
<layout>p2</layout>
<url>http://download.eclipse.org/eclipse/updates/4.3/R-4.3-201306052000</url>
</repository>
</repositories>
Добавляем maven’овский плагин tycho в сборку:
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho-version}</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
C родительским проектом пока все, теперь создаем непосредственно проект eclipse rcp – File > New > Project … > Eclipse 4 > Eclipse 4 Application Project:




Запустим приложение для проверки работоспособности, для этого:
- Открываем файл определения продукта – ru.mrdekk.ercp.gui.product
- На вкладке «Overview» нажмите «Launch an Eclipse application».
Вы должны увидеть примерно следующее:

Теперь преобразуем проект в maven’овский проект. Для этого нажимаем правой кнопкой мыши на проекте и выбираем Configure > Convert to Maven Project. Появится следующее окошко, в нем вбиваем нужные данные. Внимание! Важно чтобы эти данные совпадали с тем, что Вы ввели когда создавали проект, т.е.
MANIFEST/Bundle-SymbolicName == POM/artifactId
и
MANIFEST/.qualifier == POM/-SNAPSHOT!

Eclipse будет ругаться на полученный pom, т.к. он не увидит tycho. Чтобы все получилось, необходимо указать ссылку на созданный нами родительский проект, Ваш pom.xml должен выглядеть примерно следующим образом:
<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/xsd/maven-4.0.0.xsd" >
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>ru.mrdekk.ercp</groupId>
<artifactId>ru.mrdekk.ercp.parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<artifactId>ru.mrdekk.ercp.gui</artifactId>
<packaging>eclipse-plugin</packaging>
<name>mrdekk.ru eclipse rcp demo - gui</name>
</project>
Дальше на проекте ru.mrdekk.ercp.gui нажимаем правой кнопкой и Maven > Update Project …
Надо кроме того добавить проект ru.mrdekk.ercp.gui как модуль основного (родительского проекта), для этого в pom.xml родительского проекта добавляем:
<modules>
<module>gui</module>
</modules>
Далее на проекте ru.mrdekk.ercp.parent нажимаем правой кнопкой и Run As > Maven build … Указываем цели «clean package» и нажимаем Apply, затем Run.

Все должно нормально собраться:
[INFO] Reactor Summary:
[INFO]
[INFO] mrdekk.ru eclipse rcp demo - parent ............... SUCCESS [0.109s]
[INFO] mrdekk.ru eclipse rcp demo - gui .................. SUCCESS [2.860s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.797s
[INFO] Finished at: Mon Sep 23 11:02:05 NOVST 2013
[INFO] Final Memory: 14M/34M
[INFO] ------------------------------------------------------------------------
В следующих статьях расскажу что делать дальше. Мы соберем feature и update site, что позволит нам публиковать приложения для установки в eclipse и распространять бинарные билды.
Для референсов исходники проекта доступны на github’е вот тут.
29.06.2013
Давно я сюда уже ничего постоянно не писал, видимо стоит возобновить практику. В последнее время по долгу службы приходится работать с языком Java в области Enterprise приложений. Можно говорить много слов об этом, но я сейчас не об этом. Для Java есть замечательный Spring Framework, который позволяет сосредоточиться на проблеме, а не на вспомогательных вещах, которые кочуют из проекта в проект.
Так как я сам лично люблю С++, то попытался я поискать чего нибудь подобного для этого языка. И не нашел. Причем по отдельности, по разной функциональности есть готовые разработки и библиотеки, есть даже в Open Source, однако чего-то целостного я не нашел. Может быть кто в курсе? Или С++ настолько непопулярен для разработки такого рода приложений?…
Впрочем, увидим…
16.03.2013
Потребовался мне вдруг С++ драйвер для MongoDB на Mac OS X, так как писать для FreeBSD софт на С++ лучше всего под Mac OS X в xCode, вот такой уж винегрет.
Поэтому, первое что делаем, качаем вот отсюдова вот файлик с названием cxx-driver/mongodb-linux-x86_64-latest.tgz пофигу что linux – скомпиляем и так, ведь для Mac OS X специально нету :( а жаль.
Распаковываем, и идем в распакованную папку, пытаемся сделать
Но вот блин, scons’а нет на маке, увы :(
Ладно, качаем его отсюдова вот
и дальше
$ python setup.py install
Возвращаемся в папку с распакованным драйвером MongoDB, и пытаемся снова сделать
Веселье продолжается – на маке не установлен Boost, отлично идем и качаем исходники отсюдова вот
Как скачалось распаковываем и идем в распакованную папку и делаем
$ ./bootstrap.sh
$ ./b2
$ sudo ./b2 install
Алилуйя! Возвращаемся в папку с распакованным драйвером и снова делаем
$ scons
$ sudo scons install
И вуаля – теперь у нас есть MongoDB C++ драйвер для Mac OS X Mountain Lion
Комментарии со старой версии блога
Артем:
18.07.2013 в 20:33
Спасибо большое. Установить получилось ) но tutorial.cpp так и не получилось запустить. Выдает:
tutorial.cpp:3:35: error: mongo/client/dbclient.h: No such file or directory
Может подскажете, почему такое получается ?
MrDekk:
18.07.2013 в 20:37
Добрый день!
Попробую подсказать. Компилируете чем? Если xcode, то надо в настройках проекта установить Header Search Paths туда где у вас стоит mongo (у меня например такой путь получился – /usr/local/include). Также не забудьте прописать в Other Linker Flags параметр -lmongoclient чтобы после компиляции у Вас все слинковалось.
Ежели компиляете руками (make, gmake и иже с ними), то -I/usr/local/include -lmongoclient
Ежели не получится – отпишитесь по симптомам.
Артем:
18.07.2013 в 21:11
Решил переустановить драйвер. При запуске:
в конце получил вот такое:
In file included from src/mongo/logger/ramlog.cpp:20:
src/mongo/logger/ramlog.h:154: error: ISO C++ forbids declaration of ‘lock_guard’ with no type
src/mongo/logger/ramlog.h:154: error: invalid use of ‘::’
src/mongo/logger/ramlog.h:154: error: expected ‘;’ before » token
src/mongo/logger/ramlog.cpp:49: error: ‘lk’ was not declared in this scope
src/mongo/logger/ramlog.cpp: In constructor ‘mongo::RamLog::LineIterator::LineIterator(mongo::RamLog*)’:
src/mongo/logger/ramlog.cpp:174: error: class ‘mongo::RamLog::LineIterator’ does not have any field named ‘_lock’
scons: *** [build/mongo/logger/ramlog.o] Error 1
scons: building terminated because of errors.
p.s. В /usr/local/include пусто (
Артем:
18.07.2013 в 21:39
Нашел mongo в /opt/local/include/
Подключил так как вы описали. Теперь получаю вот такое:
/opt/local/include/mongo/pch.h:48:10: ‘boost/shared_ptr.hpp’ file not found
этот путь тоже нужно подключить так ?
MrDekk:
18.07.2013 в 22:26
ну boost тоже надо подключать, тем же способом
Артем:
19.07.2013 в 14:01
Добавил вот такое:
/opt/local/include/** /usr/local/include/boost/** /usr/local/include/boost/tr1/detail/**
Но по прежнему ругается на
/usr/local/include/boost/tr1/tr1/iostream:16:12: ‘boost/tr1/detail/config_all.hpp’ file not found
MrDekk:
21.07.2013 в 13:43
А можно iostream этот в студию?
Может быть вместо
/usr/local/include/boost/tr1/detail
надо указать
/usr/local/include/boost/tr1
28.10.2012
Ок, чтобы долго не бегать, сразу дам ответ на вопрос «Как найти строку во всех файлах в текущей папке»:
$ find $PWD -name '*.*' -exec grep -l "TEST" {} \;
Использовать по протоколу ssh, $PWD указывает на текущую директорию (можно посмотреть путь командой pwd).
Параметр -name ‘.’ указывает что идёт поиск всех файлов по маске .. К этим файлам выполняем (-exec) команду grep, которая ищет строку TEST в списке файлов и (можете изменять на свою, не забывайте только экранировать некоторые символы, например кавычки) и выводит список всех файлов (-l).
Взято отсюда