В данном руководстве описаны:
- системные требования
- подготовка Eclipse Standart (впрочем, оно также подходит для версии Eclipse for Java developers, ибо тех Maven- и WindowBuilder-плагинов, что там стоят, недостаточно) к импорту данного Maven-проекта
- собственно импорт и сборка данного проекта
- сборка для разных платформ
- возникшие в процессе и решённые проблемы
- ссылки различной степени полезности
Для сботки используется build manager Maven; некоторые плагины были отключены(напр.: maven-jar-plugin) и заменены, т. к. в нашем usecase они делали совсем не то, что нужно... а некоторые цели(goals) были переопределены:
- clean -- очистка
- compile -- компиляция
- prepare-package -- сборка .jar -- для любой платформы, возможен кроссбилдинг, см. в соответствующей главе
- package -- сборка .exe / исполняемого файла -- только для своей платформы, кроссбилдинга нет
- deploy -- отправка
*.jar
,*win32*.exe
,*win64*.exe
на FTP
Требования? А где ожидаемая кроссплатформенность, мы же используем Java...
Возникли из-за проблем совместимости версий Eclipse с плагинами для него(m2e
, Maven SCM Handler for EGit
).
Так вот, руководство актуально для Eclipse Kepler
: Eclipse Standard 4.3 или Eclipse IDE for Java Developers 4.3 на момент 2 ноября 2013.
У товарища была проблема при использовании Eclipse IDE for Java EE Developers
версии Juno
.
- Требования к версиям библиотек
Описаны в файле pom.xml
:)
Учитывая отсутствие .project
, .settings
, а тем более .classpath
проект теоретически можно собрать даже без среды.
- Требования к ОС
Являются следствием системозависимости либы SWT
, на данный момент(6 ноября 2013) в pom.xml
созданы профили для Windows x86
, Windows AMD64
, Linux x86
и Linux AMD64
.
Mac OS
не поддерживается библиотекой Hunspell-BridJ
.
Взято из предыдущего моего мануала Eclipse+GitHub
Взято отсюда.
Для установки:
- зайдите в меню Help->Install New Software
- Выберите Work with --All Available Sites--
- в фильтре наберите
m2e
и отметьте плагины как показано на рисунке - Отключите галочки, как написано здесь, чтобы Maven не забивал Workspace лишним мусором на полгигабайта.
Взято отсюда и обновлено.
Коннектор нужен для того чтобы на V-м шаге в поле 'SCM URL' был пункт 'git', иными словами, для возможности нормального импорта Maven-проектов из Git-репозиториев.
Мы вынуждены добавлять неподписанный плагин-коннектор из стороннего репозитория, из-за того что коннектор из официального репозитория не совместим с последними версиями Eclipse (судя по ссылке, эта проблема уже была начиная с Eclipse Juno).
- Click Help
- Install New Software
- Uncheck the box labeled
Group items by category
(this step is important or you won't see the connector in the table) - Paste in this URL http://repository.tesla.io:8081/nexus/content/sites/m2e.extras/m2eclipse-egit/0.14.0/N/0.14.0.201305250025/ <- осторожно, ссылка может быть обрезана из-за того что не умещается по длине - ссылка обновлена по сравнению с той что в статье...
- Eclipse предупредит об установке неподписанного плагина, соглашаемся...
- Finish the plugin install wizard and restart the workspace
- Плагин WindowBuilder добавляет WYSIWYG-редактор, с помощью которого можно быстро создавать окошки.
- Страница загрузки WindowBuilder, на которой нужно выбрать соответствующую вашей версии Eclipse ссылку:
Эта ссылка, например для Eclipse Kepler, как и все остальные, содержит инструкции по установке. - Использование:
Взято отсюда и дополнено.
- Select the "Import..." context menu from the Package Explorer view
- Select "Check out Maven projects from SCM" option under the Maven category
- Выбираем SCM URL: git и вставляем ссылку:
Здесь есть одна особенность - а именно: Eclipse может 'задуматься' на несколько секунд(Windows) или на несколько минут(Linux) перед тем, как собственно отобразить проект в Package Explorer.
4. Дальше обновляем проект(иногда сам Maven просит это сделать через Problems View):
Maven
-> Update Project...
Снимаем галочку Offline:
5. Скорее всего на значке проекта будет восклицательный знак, либо красный крест - это от того что Eclipse не видит нужных библиотек(зависимостей).
Сейчас мы их скачаем:
Запускаем Тесты: Run As
-> Maven test
Ждём, пока maven скачает все нужные для сборки maven-плагины и зависимости(библиотеки)... Куда?
Успех:
Если на значке проекта по-прежнему остаётся восклицательный знак или красный крест, то обновляем проект.
Предположим, у вас платформа win x86
и вы собираетесь сделать билд для win x86_64
.
При попытке сборки с указанием профиля mvn prepare-package -P winprofile64
в результирующий jar добавятся библиотеки SWT для win x86 (т. к. профиль winprofile32 активировался сам из-за тега <activation>
), а плагин manen-assembly-plugin не произведёт замену, из-за того что содержащиеся в архиве org.eclipse.swt.win32.win32.x86_64-4.3.jar файлы swt-xulrunner-win32-4332.dll, ...
имеют идентичные названия с уже добавленными файлами для org.eclipse.swt.win32.win32.x86-4.3.jar.
В результате на выходе в папке target
имеем файл Coursework-on-Software-Engineering-win64--2014-01-12--15-39-standalone.jar, который вроде бы и предназначен для x64, а на самом деле содержит x32-библиотеки, и на x64 не запустится в принципе.
Решение:
Нужно принудительно деактивировать профиль вашей платформы, в нашем случае это winprofile32
:
mvn prepare-package -P winprofile64,!winprofile32
- Ругается на наличие BOM:
illegal character: \65279
Проблема проявилась на Linux Mint amd64, но не проявилась на Windows x86.
Решение:
# Removing BOM from all text files in current directory:
sed -i '1 s/^\xef\xbb\xbf//' *.java
- Куда подевался гигабайт дискового пространства?
-
Maven скачивает зависимости(библиотеки) и прочие maven-плагины в
~/.m2/repository
на Linux и в%USERPROFILE%\.m2\repository
на Windows. Очищать эти папки во время работы над проектом нет смысла. -
По непонятным причинам Maven забирает примерно 500МБ в
Your_Workspace_path/.metadata/.plugins/org.eclipse.m2e.core/nexus
Это безобразие можно отключить, открывWindow
->Preferences
и выставив галочки вот так:
(решение взято отсюда, но нужно оставить снятой галочкуOffline
, иначе не скачаются новые файлы(плагины и зависимости), а значит мы не сможем собрать только что импортированный проект).
Затем можно удалить папкуYour_Workspace_path/.metadata/.plugins/org.eclipse.m2e.core/nexus
. -
pom.xml скорее всего не совместим со старым maven 2.x
В Eclipse, судя по возникшим проблемам, используется maven 3.x.
- An error occurred while collecting items to be installed...
Или "Восстанавливаем работоспособность Help -> Install New Software
и Help -> Check for Updates
в Eclipse Kepler".
Взято отсюда и обновлено для Eclipse Kepler.
-
export the update site listing to bookmarks.xml file (Install/Update->Available Software Sites->Export)
-
stop eclipse
-
remove configuration/.settings/org.eclipse.equinox.p2.*.prefs files
C:\Program Files\eclipse\p2\org.eclipse.equinox.p2.engine\.settings
C:\Program Files\eclipse\p2\org.eclipse.equinox.p2.engine\profileRegistry\epp.package.standard.profile\.data\.settings
-
start eclipse
-
import the bookmarks.xml file (Install/Update->Available Software Sites->Import) that was exported in step 1
Возникает при импорте проекта(Import...
-> Check out Maven projects from SCM
-> SCM URL
) на старых версиях Eclipse.
Решение: Используйте Eclipse Kepler 4.3
- No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] —-----------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] —-----------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
Проблема возникает из-за того что встроенный Maven не видит JDK, и как следствие не может скомпилировать:
- Если не установлена JDK - установить.
- JDK установлена, но в Eclipse сбились
Installed JREs
- выставлена JRE:
Должна быть JDK:
- Неправильно отображаются русские буквы
Решение: Properties
-> Resource
-> Text File Encoding
-> UTF-8
Результат:
- Внезапно появились ошибки - Eclipse не видит импортируемые пакеты
Решение: обновите проект.
- Не работает maven-release-plugin :
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.0:branch (default-cli) on project Coursework-on-Software-Engineering: Unable to commit files
[ERROR] Provider message:
[ERROR] The git-add command failed.
[ERROR] Command output:
[ERROR] "git" не является внутренней или внешней
[ERROR] командой, исполняемой программой или пакетным файлом.
Решение:
-
Добавьте путь к git.exe в PATH
1.1 Удостоверьтесь, что git.exe виден из консоли, набрав git:
-
Перезапустите Eclipse
-
git, запущенный maven-release-plugin'ом требует имя и email:
[ERROR]
[ERROR] *** Please tell me who you are.
[ERROR]
[ERROR] Run
[ERROR]
[ERROR] git config --global user.email "you@example.com"
[ERROR] git config --global user.name "Your Name"
[ERROR]
[ERROR] to set your account's default identity.
[ERROR] Omit --global to set the identity only in this repository.
[ERROR]
Решение:
В консоли отображается
[INFO] Executing: cmd.exe /X /C "git push https://github.com/nikit-cpp/Coursework-on-Software-Engineering.git 0.1.x"
[INFO] Working directory: E:\Programming\Examples 9 java\swt\Coursework-on-Software-Engineering
а в диспетчере задач висит процесс git.exe
Решение: нужно указать имя и пароль:
- способ 1:
создать в папке проекта файл release.properties с 2-мя строками:
scm.username=your_github_username
scm.password=your_github_password
Не забудьте добавить файл release.properties в .gitignore, вы же не хотите запушить свой логин и пароль на публичный репозиторий :)
Судя по всему он изменяется с каждой версией, и вышеупомянутые строки придётся вписать ещё раз...
- способ 2:
дописать параметры при вызове maven:
-Dusername=your_github_username -Dpassword=your_github_password
- Не работает release:prepare
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.4.2:prepare (default-cli) on project Coursework-on-Software-Engineering: Failed to invoke Maven build. Error configuring command-line. Reason: Maven executable not found at: E:\Programming\Examples 9 java\swt\Coursework-on-Software-Engineering\EMBEDDED\bin\mvn.bat -> [Help 1]
release-plugin не способен вызвать embedded maven, поэтому придётся поставить maven(да-да, с дописыванием в PATH - чтобы его можно было вызвать из консоли, набрав mvn) и задать его в настройках Eclipse: Window -> Prefrences -> Maven -> Installations
- http://markable.in/editor/ - онлайн-редактор Markdown, этот текст был написан в нём
- http://git-scm.com/book/ru/ - "Pro Git" на русском
- http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html - Жизненный цикл Maven
- http://habrahabr.ru/post/77382/ - Apache Maven — основы
- https://wiki.openmrs.org/display/docs/Using+the+M2Eclipse+Maven+Plugin+in+Eclipse - работа с m2eclipse
- http://habrahabr.ru/post/130936/ - Делаем релизы с помощью Maven в Java