Знакомство с Java было в университете и при воспоминаниях об этом бросает в холодный пот. Кроме нового незнакомого языка, приходилось устанавливать какой-то JDK, потом IDE, потом создавать первый проект и вручную добавлять в него библиотеки. Делать по аналогии с готовыми программами и ловить неизведанные java.lang.ClassNotFoundException и java.lang.NoSuchMethodException и тому подобный ужас. Когда знал как работать только в операционной системе Windows и доступ в интернет был по модему через телефонную линию.
Надеюсь интересно будет как тем, кто делает первые шаги в java и тем, кто помнит jdk 1.4. Попробуем online IDE Eclipse Che.
Оговорюсь про главное условие — сейчас у вас должен быть стабильный доступ в интернет. И конечно же после прочтении статьи вы не получите работу Java архитектором в Нью-Йорке за 180 000 $ в год и даже не выучите Java за 21 день. Просто разработаем в современном окружении свой Hello world в несколько строчек кода, но с веб сервером.
Облачная IDE и разработка в Docker контейнере
Открытое программное обеспечение Eclipse Che — IDE нового поколения для коллективной разработки ПО. Не столь привычно нам «старичкам», но позволяет разрабатывать имея локально лишь современный браузер и стабильный доступ к сети. Сервер Che может быть запущен в локальной сети. Для быстрого старта нам даже не нужно ничего устанавливать!!!
Перейдите по ссылке Eclipse Che. Там возможно создать бесплатный аккаунт на codenvy.com. Можно зарегистрировать его на свою почту, либо воспользоваться OAuth провайдерами: Github, Google или Microsoft online.
На стороне сервера автоматически создается Docker контейнер с уже настроенным окружением для разработки. С помощью агента в контейнере к нему подключается IDE на javascript из вашего браузера.
При создании из шаблона «Java» в контейнере обычная сборка Ubuntu, а это значит что можно устанавливать необходимые вам для работы пакеты. Шаблон «Eclipse Che» основан на Alipine — минималистичной сборке linux под Docker и там такой свободы у вас нет.
Итак о чем я это. Если вы не знаете что это такое, пока можете даже не беспокоиться об этом. Все работает и так «из коробки», пусть на первом шаге это будет казаться магией! Со временем при желании разобраться во всем этом довольно просто.
Создадим новый «Workspace» из шаблона «Java». Прийдется посмотреть мультфильм со строительным краном, пока создается ваше пространство для разработки.
В вашем окружении разработки будут доступны Oracle JDK 8u45 и Maven 3.3.9. Точно также легко можно начать разработку на основе проекта с Github.
Система управления зависимостями и сборки
Стандартом де-факто в мире Java является Maven и, наверное, самая лучшая поддержка в разных IDE. Gradle более молодой проект и он заслуживает право стать вашим выбором №1. Но при выходе на работу Java разработчиком вероятность встретить Maven гораздо выше, особенно на унаследованных проектах. К тому же он тоже пытается молодиться и уйти от XML формата за счет проекта Polyglot. Atom, Groovy, Clojure, Ruby, Scala, YAML — как основа для написания файла сборки. Тут история как и с языком программирования в JVM. Несмотря на существование Groovy, Scala, JRuby, Jython, Clojure всю их мощь и лаконичность, язык Java живее всех живых. И даже не сравнивайте Java с вождем — язык программирования живой и хоть медленно, но развивается.
Проект по-умолчанию console-java-simple предложит нам любимый Hello World.
Предлагаю чуть усложнить наш первый шаг и добавить Apache Camel в проект. Источники и приемники данных и вся сложность работы с технологиями скрываются за Url синтаксисом внутри его компонент и мы не будем погружаться глубоко.
Магия «верблюда»
Eclipse Che создал для нас нас шаблон проекта, который мы сейчас отредактируем и создадим наше веб приложение.
Apache Camel — это open source интеграционный фреймворк и нам он нужен лишь для простого Hello World. Добавим его библиотеки в pom.xml зависимость на ядро «верблюда» и компонент jetty веб сервера.
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>2.18.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jetty</artifactId>
<version>2.18.0</version>
</dependency>
Для того, чтобы компилировались лямбды добавим в этот же файл:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
После этого отредактируем файл /console-java-simple/src/main/java/org/eclipse/che/examples/HelloWorld.java заодно прочувствуем как работает эта online IDE.
package org.eclipse.che.examples;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.main.Main;
public class HelloWorld {
public static void main(String[] argvs) throws Exception {
Main main = new Main();
main.addRouteBuilder(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("jetty:http://0.0.0.0:8080")
.process(exchange -> {exchange.getIn().setBody("Hello World");});
}
});
main.run(argvs);
}
}
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.5.0</version>
<executions>
<execution>
<goals><goal>java</goal></goals>
</execution>
</executions>
<configuration>
<mainClass>org.eclipse.che.examples.HelloWorld</mainClass>
</configuration>
</plugin>
</plugins>
</build>
Запустим проект командой из терминала
mvn clean install exec:java
Или отредактируем конфигурацию запуска «по щелчку» в IDE.
Подключиться к нашему веб приложению из внешнего мира можно по адресу из столбца «Server Address» для строки «tomcat8». Как это сделать можете посмотреть в видео дальше:
Результат работы нашей программы:
В этом примере создается Apache Camel и его маршрут обработки данных. Маршрут начинается с веб сервера jetty, который слушает http запросы на порту 8080. При получении запроса мы создаем ответ с помощью строчки process(exchange -> {exchange.getIn().setBody(«Hello World»);}).
Скринкаст процесса написания java кода (без звука и мата) в Che и запуска программы Hello World:
Что дальше?
Достаточно доступа в интернет и браузера в 2016 году чтобы учиться разрабатывать на Java. Не надо решать 1000 и 1 проблему с установкой и настройкой IDE и окружения, чтобы начать учиться программировать.
А еще не верьте курсам что вас научат программировать на Java за 21 день и тому подобному маркетингу. Чтобы познать дзен разработки на Java нужны годы. Учиться, учиться и еще раз учиться!
Комментарии (41)
DrPass
06.12.2016 14:00+6Не надо решать 1000 и 1 проблему с установкой и настройкой IDE и окружения, чтобы начать учиться программировать.
Вот не знаю, если честно. По моему мнению, если установить и настроить IDE — это проблема, то рано начинать учиться программировать. Я могу понять банальную лень, которая мешает найти статью «Установка Eclipse» и выполнить десяток шагов, но то, что это может вызвать какие-либо иные сложности, понять не могу.23derevo
06.12.2016 14:06+2Чем ниже порог входа, тем быстрее технология набирает популярность. Так что автор очень резонно пишет о мотивации.
webkumo
06.12.2016 14:56+3А оно действительно нужно снижать порог входа? Это ведь породит кучу других проблем...
23derevo
06.12.2016 17:31+1Ваша формулировка содержит половину ответа на этот вопрос. Кому нужно?
Людям, которые хотят работать в командах опытных профессионалов, чтобы всякие ламеры не совались — конечно не нужно. Людям, которые ищут инженеров в свою компанию затыкать дыры на проектах — конечно, нужно. Вендору, делающему эту технологию — конечно, нужно. Вендору, делающему конкурирующую технологию — конечно, не нужно. Ну и т.п.DrPass
06.12.2016 19:24+7Я с вами не соглашусь. Это не нужно никому, кроме тех самых людей «ниже порога вхождения», ибо они же работу получить хотят :)
Это не нужно ни для затыкания дыр в проектах, потому что стоимость услуг низкоквалифицированного программиста обычно оказывается намного выше, чем стоимость программиста без серьёзных пробелов в образовании. Это не нужно вендору, делающему эту технологию, т.к. комьюнити плохих специалистов может легко убить репутацию любой, даже очень хорошей технологии. Ну и для Java тем более не нужно, эта технология очень зрелая и прекрасно продвигает сама себя, без необходимости расширять сообщество разработчиков людьми, которые не умеют читать мануалы.igor_suhorukov
06.12.2016 20:17У Che все-таки есть ниша корпоративных платежеспособных клиентов в поддержке. То что codenvy бесплатно дает платформу для opensource — плюс в их карму. Che быстро развивается.
Markscheider
06.12.2016 20:07+3По моему мнению, если установить и настроить IDE — это проблема, то рано начинать учиться программировать
Вы знаете, а проблема может быть еще и в отсутствии подходящего железа. В странах третьего мира, например. Ну или там, где есть доступ к нормальному компу, но только гостевой. Интернет-кафе еще не везде отменили. А тут все в браузере — покодил и ушел. Лепота!devalone
07.12.2016 00:32+1У меня ноут с двухядерным пеньком и двумя гигами оперативной, и когда я запускаю eclipse или idea и, допустим, firefox, это всё начинает нещадно тормозить, причём idea периодически, а eclipse постояно подтормаживает, а если ещё запустить сборку какого нибудь спринг проекта maven'ом, то вообще ад. ОС — ubuntu, WM — openbox.
UbuRus
06.12.2016 14:22+3Джаву в браузере еще можно писать на
А, например, для Котлин есть отличная mini-IDE:
Где можно писать на разных версиях Котлин, и решать Коаны.
Provlax
06.12.2016 15:29-1Что-то не пошло. Видимо придется по старинке )
igor_suhorukov
06.12.2016 20:19Попробуйте удалить и пересоздать. Я такой скрин впервые вижу, хотя много раз разный workspace создавал…
Suvitruf
07.12.2016 06:24<sarcasm>Ещё можно попробовать перезагрузиться 3 раза</sarcasm>.
igor_suhorukov
07.12.2016 09:33Судя по сообщению и timeout просто вчера наплыв пользователей из РФ создающих новые контейнеры стал DDOS для бесплатного сервиса.
pmcode
06.12.2016 15:46-1А еще не верьте курсам что вас научат программировать на Java за 21 день и тому подобному маркетингу
Рекламу совершенно ненужного новичку Эклипс Че можно смело записывать в разряд «тому подобного маркетинга». На самом деле даже более интересно было бы услышать кому он вообще нужен? Зачем писать джаву в браузере?igor_suhorukov
06.12.2016 20:10В нем есть приятный момент и 23derevo прав, что сразу можно начинать программировать и это позволяет новичкам сконцентрироваться на главном и понизить сложность первоночального освоения. Для опытных же разработчиков, не знакомых с docker — есть возможность легко с ним познакомиться. Все окружение для разработке поставляется в контейнерах.
bnsfg
06.12.2016 18:56+2Как по мне, огромное количество ненужных действий, которые заменяются на «скачать JDK->скачать любую IDE-писать код».
С другой стороны, благодарю автора за то, что напомнил про Eclipse Che. Видел упоминание его на сайте эклипса краем глаза, но не стал тогда особо интересоваться.igor_suhorukov
06.12.2016 20:15Спасибо! У Che есть преимущества как для новичков, так и в крупных компаниях с параноидальной безопасностью — все же лучше работать в быстром браузере, чем работать на тормозящем RDP через VPN с производительностью виртуалок на уровне компьютера 2005 года из за оптимизации ресурсов.
IvSan
06.12.2016 20:11+1[ERROR] projects/maven-nm1r/src/main/java/org/eclipse/che/examples/HelloWorld.java:[14,39] lambda expressions are not supported in -source 1.5
[ERROR] (use -source 8 or higher to enable lambda expressions)
Эм, подскажите пожалуйста, а как заиспользовать то восьмую java вместо пятой?igor_suhorukov
06.12.2016 20:12+2В pom.xml добавьте строки
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
VGoudkov
06.12.2016 23:42+4Помимо IDEA и Eclipse есть незаслуженно забытый NetBeans, и что характерно — с порогом входа сильно ниже чем у двух вышеперечисленных, визардами и очень неплохой документацией. Версия 8.2 — вполне достойна, а с визуальной схемой Darcula — так и вообще замечательно работается… Я бы кратко оценил среду как «Delphi для Java» — начинать также просто и интуитивно понятно, а запросы к Google «как в NetBeans сделать *ABC*» зачастую ведут не на SO, а вовсе даже на официальный сайт.
На практике — у нас специалист техподдержки с нулевым знанием Java поставил среду,написалскопипастил и заставил работать нужный код за пару дней.xmonoid
07.12.2016 19:41+1Вот согласен, кстати. Вдобавок в NetBeans простая и удобная интеграция с серверами Tomcat и GlassFish, с СУБД JavaDB и MySQL, и даже есть клиент для написания запросов к БД, пусть и не очень мощный. Плюс такие мелкие приятности, как статический анализатор кода, высвечивающий потенциальные проблемы, неочевидные для новичка, и даже способный отрефакторить legacy-код в новый вид (скажем, автоматически переписать анонимный класс в лямбду).
При этом он, по субъективным ощущениям, не имеет слишком уж частых и сильных подвисаний на типовых операциях вроде переименования полей и методов класса, генерации юнит-тестов и джавадоков, чем почему-то страдает Eclipse, по крайней мере на моём компьютере.
EGlaz
07.12.2016 14:23У меня при работе крана (при создании рабочего окружения) возникла ошибка:
Error when starting agent
Unable to start workspace agent. Error when trying to start the workspace agent: Start of environment default failed. Error: Error response from docker API, status: 500, message: Error response from daemon: couldn't get vxlan id for «10.0.4.0/24»: failed to allocate vxlan id: no bit availableigor_suhorukov
07.12.2016 19:41О, что-то пошло не так у codenvy на хостинге amazon. Отправте отчет об ошибке в codenvy.
EGlaz
08.12.2016 10:03Сегодня по видео всё сделал. Запустилось как на видео — всё в порядке.
А дальше другие ошибки — не может подключиться к терминалу. Не могу собственно увидеть результат выполнения «Hello world».
Хотелось бы такую же штуковину, но не через Eclipse а IDEA.EGlaz
08.12.2016 10:09Вверху в центре висит состояние: «Starting workspace runtime…
Retrieving the stack's image and launching it» и это уже минут 7 происходит без заметных результатов.
Хотелось бы такую же штуковину, но не через Eclipse а IDEA.
Где-то месяц-два назад я тоже пробовал сделать Hello World в среде codenvy и так же спотыкался на этапе работы крана, и далее после запуска Workspace. Как-то нестабильно работает сервис.
Кстати, а где там кнопка для отправки ошибки в codenvy?igor_suhorukov
08.12.2016 10:21+1Для бесплатной версии думаю подойдет письмо: support@codenvy.com
Функциональные ошибки можно заводить тут https://github.com/codenvy/codenvy/issues
igor_suhorukov
08.12.2016 10:23+1Не можете подключиться к терминалу если некоторое время не работали со средой разработки, то автоматически по таймауту останавливается контейнер. Надо его принудительно запустить.
EGlaz
08.12.2016 10:30+1Спасибо.
Сейчас, после того как перезашёл, перезапустил workspace заработало.
Наконец-то увидел «hello world che».
После IDEA непривычная среда.igor_suhorukov
08.12.2016 10:33Похоже, что экономия ресурсов от codenvy запутает кого угодно) Согласен, что непривычно
budda
07.12.2016 20:04Не знаю кому в 2016 может быть сложно установить JRE, JDK и IDE.
Начал учить Java пол года назад (я не ITшник). За это время поменял HDD на SSD на нетбуке, делал реорганизацию дисков на десктопе, все это с установкой Win10 и Ubuntu 16.10 и везде накатывал JRE и JDK с разными IDE. Если использовать правильный порядок установки 1. JRE и JDK 2. IDE то проблем нет. Если на оборот, то нужно потом продираться через тучу настроек, что бы указать IDE, где установлен JDK.
А в плане производительности… я недавно экспериментировал и запускал актуальные версии Idia, NetBeans и Eclipse на Raspberry Pi 3 (Raspbian OS). И вся тройка работала, да для реальной работы такое железо слабо, но я думал, что после запуска современной IDE там уже и оперативки свободной не будет (там 1 Гб DDR3), как оказалось при работе с мелким консольным приложением из нескольких классов в IntelliJ IDEA можно еще держать пару-тройку открытых вкладок в Chromium.
А что касается порога вхождения… начитавшись експердов, что Java тормознутое г. решил сначала попробовать учить С++. Поставил Code Blocks с MinGW, решил попробовать сделать Hellow World на wxwidgets. Сначала там не как не мог при создании проекта понять, что от меня IDE хочет, оказалось, что не смотря на наличие пункта wxwidgets project нужно скачать сам wxwidgets и прописать путь к нему при создании проекта. А потом ему не хватало какого то setup.h… вообщем не осилил. А на Java совсем другое дело.
navrocky
07.12.2016 22:45+1IDE очень слабенькая особенно если не java код, дополнение вообще отсутствует. А так конечно забавно и для хеллоуворлдов пойдет. По крайней мере на данный момент.
Попробовал локально в докере поднять — поднялось с пол пинка, все работает отлично.
dolbnya
Первоначально подумалось, что статья будет о том, как написать Hello World без IDE и при минимальных энергозатратах.
igor_suhorukov
Спасибо, верное замечание! Добавил про Eclipse Che перед катом.