Разрабатываем Java2ME под Eclipse

Jun 4, 2013 23:04 · 596 words · 3 minute read tutorial

Данный материал сильно устарел и оставлен лишь для истории

Есть у меня один проектик под J2ME (github). Это небольшое приложение - клиент для списка покупок. Разрабатывалось оно специально для моей второй половинки, чтобы было удобно сообщать что нужно купить в магазине. Т.к. телефон у неё простой, то единственный вариант нативного приложения - Java2ME. Решил я его доделать, но все настройки Eclipse слетели после перехода с OpenSUSe на Mint. Что ж, вспомним как это было :)

Итак, дано: Mint 14 (x86_64) и исходники на github, надо скомпилить и запустить их в терминале. Для начала ставим Eclipse:

$ sudo apt-get install eclipse

соглашаемся с установкой всех необходимых пакетов, в том числе и openjdk. Последний необходим только для того, чтобы гладко прошла процедура установки, в дальнейшем мы от него откажемся и установим JDK от Oracle. Для людей не из мира Java поясню: openjdk - свободная реализация JVM (java-машины). Она опенсорсная и всячески кошерная, но под неё некоторые вещи не идут, например, продукты JetBrains, посему основной в моей системе стоит оригинальная JVM от Oracle.

Скачиваем всё, что нам понадобится с сайта Oracle: последние JDK 64х и 32х битные (да-да, эмулятор J2ME работает только под 32х-битной реализацией) и WTK 2.5.2 (к сожалению, более новые версии есть только под Windows). Кстати, выяснилось, что WTK 2.2 битый - при установке выдаёт ошибку:

Enter a path to the Java 2 SDK: /opt/java/32/bin
/opt/java/32/bin
Testing /opt/java/32/bin...
Exception in thread "main" java.lang.ClassFormatError: com.sun.kvem.environment.JavaVersionTester (unused data before end of file)
  at java.lang.VMClassLoader.defineClass(libgcj.so.90)
  at java.lang.ClassLoader.defineClass(libgcj.so.90)
  at java.security.SecureClassLoader.defineClass(libgcj.so.90)
  at java.net.URLClassLoader.findClass(libgcj.so.90)
  at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.90)
  at java.lang.ClassLoader.loadClass(libgcj.so.90)
  at java.lang.ClassLoader.loadClass(libgcj.so.90)
  at gnu.java.lang.MainThread.run(libgcj.so.90)
/opt/java/32/bin is not a suitable Java interpreter

После того как всё скачали, устанавливаем. Советую ставить всё это добро куда-нибудь в /opt - этот каталог вроде как специально сделан для сторонних приложений. Распаковываем JDK для i586 в /opt/java/32, JDK для x64 в /opt/java/64. Сделаем 64х-битную java выполняемой по умолчанию, для этого воспользуемся специальным механизмом альтернатив:

$ sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/64/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/java/64/bin/javac" 1
$ sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/opt/java/64/bin/javaws" 1
$ sudo update-alternatives --set java /opt/java/64/bin/java
$ sudo update-alternatives --set javac /opt/java/64/javac
$ sudo update-alternatives --set javaws /opt/java/64/bin/javaws

В первых трёх строчках мы сказали ОС, что у нас есть альтернативы для выполняемых файлов java, javac, javaws; в последних - что их надо использовать по умолчанию.

Проверяем, должно получиться как-то так:

$ java -version
java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

Устанавливаем J2ME WTK - запускаем скачанный скрипт. На вопрос где же брать JVM отвечаем /opt/java/32 и задаём путь установки как /opt/java/j2me. На этом с установкой всех компонентов java закончили, переходим к настройке Eclipse.

Для разработки мидлетов нам понадобится плагин EclipseME. На его сайте подробно описана установка. Я предпочёл ставить с сайта - таким образом я буду получать обновления. Для сборки проектов этот плагин использует специальный сборщик antenna. По ссылке качаем файлик и кидаем его в /opt/java/j2me. Настройка плагина состоит в указании пути к этому файлу, WTK Root (у нас это /opt/java/j2me) и в указании эмулятора. Для запуска последнего необходимо в Device Management импортировать идущие в комплекте с WTK. Указываем каталог где искать как /opt/java/j2me и нажимаем кнопку Refresh. Себе я оставил только DefaultColorPhone.

С импортом проекта и компиляцией проблем возникнуть не должно, а вот запуск надо сконфигурировать отдельно. Для начала соберём пакет: правой клавишей по проекту -> J2ME -> Create package, а после идём в Run Configuration и создаём новую конфигурацию WTK. Там указываем проект и путь к JAD-файлу в каталоге deployed (именно для этого мы и собрали сначала пакет). Вроде, всё! Осталось запустить выполнение с помощью созданной конфигурации.

Успешной разработки! :)