По прошествию многих лет я подумал, а как бы я разрабатывал свою первую программу на Java, если бы я начал сегодня?


Знакомство с 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);
    }
}

Для того чтобы можно было запустить пример командой mvn clean install exec:java нужно добавить в pom.xml exec-maven-plugin
    <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)


  1. dolbnya
    06.12.2016 12:19
    +5

    Первоначально подумалось, что статья будет о том, как написать Hello World без IDE и при минимальных энергозатратах.


    1. igor_suhorukov
      06.12.2016 12:23

      Спасибо, верное замечание! Добавил про Eclipse Che перед катом.


  1. DrPass
    06.12.2016 14:00
    +6

    Не надо решать 1000 и 1 проблему с установкой и настройкой IDE и окружения, чтобы начать учиться программировать.

    Вот не знаю, если честно. По моему мнению, если установить и настроить IDE — это проблема, то рано начинать учиться программировать. Я могу понять банальную лень, которая мешает найти статью «Установка Eclipse» и выполнить десяток шагов, но то, что это может вызвать какие-либо иные сложности, понять не могу.


    1. 23derevo
      06.12.2016 14:06
      +2

      Чем ниже порог входа, тем быстрее технология набирает популярность. Так что автор очень резонно пишет о мотивации.


      1. webkumo
        06.12.2016 14:56
        +3

        А оно действительно нужно снижать порог входа? Это ведь породит кучу других проблем...


        1. 23derevo
          06.12.2016 17:31
          +1

          Ваша формулировка содержит половину ответа на этот вопрос. Кому нужно?

          Людям, которые хотят работать в командах опытных профессионалов, чтобы всякие ламеры не совались — конечно не нужно. Людям, которые ищут инженеров в свою компанию затыкать дыры на проектах — конечно, нужно. Вендору, делающему эту технологию — конечно, нужно. Вендору, делающему конкурирующую технологию — конечно, не нужно. Ну и т.п.


          1. DrPass
            06.12.2016 19:24
            +7

            Я с вами не соглашусь. Это не нужно никому, кроме тех самых людей «ниже порога вхождения», ибо они же работу получить хотят :)
            Это не нужно ни для затыкания дыр в проектах, потому что стоимость услуг низкоквалифицированного программиста обычно оказывается намного выше, чем стоимость программиста без серьёзных пробелов в образовании. Это не нужно вендору, делающему эту технологию, т.к. комьюнити плохих специалистов может легко убить репутацию любой, даже очень хорошей технологии. Ну и для Java тем более не нужно, эта технология очень зрелая и прекрасно продвигает сама себя, без необходимости расширять сообщество разработчиков людьми, которые не умеют читать мануалы.


            1. igor_suhorukov
              06.12.2016 20:17

              У Che все-таки есть ниша корпоративных платежеспособных клиентов в поддержке. То что codenvy бесплатно дает платформу для opensource — плюс в их карму. Che быстро развивается.


    1. Markscheider
      06.12.2016 20:07
      +3

      По моему мнению, если установить и настроить IDE — это проблема, то рано начинать учиться программировать

      Вы знаете, а проблема может быть еще и в отсутствии подходящего железа. В странах третьего мира, например. Ну или там, где есть доступ к нормальному компу, но только гостевой. Интернет-кафе еще не везде отменили. А тут все в браузере — покодил и ушел. Лепота!


      1. DrPass
        06.12.2016 21:10
        +2

        В принципе да, юзеркейсы могут быть разные.


      1. devalone
        07.12.2016 00:32
        +1

        У меня ноут с двухядерным пеньком и двумя гигами оперативной, и когда я запускаю eclipse или idea и, допустим, firefox, это всё начинает нещадно тормозить, причём idea периодически, а eclipse постояно подтормаживает, а если ещё запустить сборку какого нибудь спринг проекта maven'ом, то вообще ад. ОС — ubuntu, WM — openbox.


        1. DrPass
          07.12.2016 02:59
          +3

          Подозреваю, IDE в броузере по производительности будет как минимум не лучше десктопных. А по потреблению памяти, так и похуже.


          1. Bringoff
            07.12.2016 12:21

            Билд, как минимум, идет не на локальной машине, как я понимаю.


            1. igor_suhorukov
              07.12.2016 19:40

              Да, билд идет в docker контейнере.


  1. UbuRus
    06.12.2016 14:22
    +3

    Джаву в браузере еще можно писать на


    https://www.codewars.com/


    А, например, для Котлин есть отличная mini-IDE:


    http://try.kotl.in/


    Где можно писать на разных версиях Котлин, и решать Коаны.


  1. Provlax
    06.12.2016 15:29
    -1

    Что-то не пошло. Видимо придется по старинке )

    image


    1. igor_suhorukov
      06.12.2016 20:19

      Попробуйте удалить и пересоздать. Я такой скрин впервые вижу, хотя много раз разный workspace создавал…


      1. Suvitruf
        07.12.2016 06:24

        <sarcasm>Ещё можно попробовать перезагрузиться 3 раза</sarcasm>.


        1. igor_suhorukov
          07.12.2016 09:33

          Судя по сообщению и timeout просто вчера наплыв пользователей из РФ создающих новые контейнеры стал DDOS для бесплатного сервиса.


          1. DrPass
            07.12.2016 13:04

            И все мы знаем, кто этот DDоS организовал ;)


  1. pmcode
    06.12.2016 15:46
    -1

    А еще не верьте курсам что вас научат программировать на Java за 21 день и тому подобному маркетингу

    Рекламу совершенно ненужного новичку Эклипс Че можно смело записывать в разряд «тому подобного маркетинга». На самом деле даже более интересно было бы услышать кому он вообще нужен? Зачем писать джаву в браузере?


    1. 23derevo
      06.12.2016 17:31
      +1

      Это нужно, чтобы снизить порог входа.


      1. zirix
        06.12.2016 18:02
        +4

        Это нужно, чтобы снизить порог входа

        поставить intellij и jdk кнопками далее>далее>далее.
        в IDE File>New>Project>[Maven].
        Куда уже ниже?


    1. igor_suhorukov
      06.12.2016 20:10

      В нем есть приятный момент и 23derevo прав, что сразу можно начинать программировать и это позволяет новичкам сконцентрироваться на главном и понизить сложность первоночального освоения. Для опытных же разработчиков, не знакомых с docker — есть возможность легко с ним познакомиться. Все окружение для разработке поставляется в контейнерах.


  1. bnsfg
    06.12.2016 18:56
    +2

    Как по мне, огромное количество ненужных действий, которые заменяются на «скачать JDK->скачать любую IDE-писать код».

    С другой стороны, благодарю автора за то, что напомнил про Eclipse Che. Видел упоминание его на сайте эклипса краем глаза, но не стал тогда особо интересоваться.


    1. igor_suhorukov
      06.12.2016 20:15

      Спасибо! У Che есть преимущества как для новичков, так и в крупных компаниях с параноидальной безопасностью — все же лучше работать в быстром браузере, чем работать на тормозящем RDP через VPN с производительностью виртуалок на уровне компьютера 2005 года из за оптимизации ресурсов.


  1. 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 вместо пятой?


    1. 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>
      


  1. VGoudkov
    06.12.2016 23:42
    +4

    Помимо IDEA и Eclipse есть незаслуженно забытый NetBeans, и что характерно — с порогом входа сильно ниже чем у двух вышеперечисленных, визардами и очень неплохой документацией. Версия 8.2 — вполне достойна, а с визуальной схемой Darcula — так и вообще замечательно работается… Я бы кратко оценил среду как «Delphi для Java» — начинать также просто и интуитивно понятно, а запросы к Google «как в NetBeans сделать *ABC*» зачастую ведут не на SO, а вовсе даже на официальный сайт.
    На практике — у нас специалист техподдержки с нулевым знанием Java поставил среду, написал скопипастил и заставил работать нужный код за пару дней.


    1. xmonoid
      07.12.2016 19:41
      +1

      Вот согласен, кстати. Вдобавок в NetBeans простая и удобная интеграция с серверами Tomcat и GlassFish, с СУБД JavaDB и MySQL, и даже есть клиент для написания запросов к БД, пусть и не очень мощный. Плюс такие мелкие приятности, как статический анализатор кода, высвечивающий потенциальные проблемы, неочевидные для новичка, и даже способный отрефакторить legacy-код в новый вид (скажем, автоматически переписать анонимный класс в лямбду).
      При этом он, по субъективным ощущениям, не имеет слишком уж частых и сильных подвисаний на типовых операциях вроде переименования полей и методов класса, генерации юнит-тестов и джавадоков, чем почему-то страдает Eclipse, по крайней мере на моём компьютере.


  1. 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 available


    1. igor_suhorukov
      07.12.2016 19:41

      О, что-то пошло не так у codenvy на хостинге amazon. Отправте отчет об ошибке в codenvy.


      1. EGlaz
        08.12.2016 10:03

        Сегодня по видео всё сделал. Запустилось как на видео — всё в порядке.
        А дальше другие ошибки — не может подключиться к терминалу. Не могу собственно увидеть результат выполнения «Hello world».

        Хотелось бы такую же штуковину, но не через Eclipse а IDEA.


        1. 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?


          1. igor_suhorukov
            08.12.2016 10:21
            +1

            Для бесплатной версии думаю подойдет письмо: support@codenvy.com
            Функциональные ошибки можно заводить тут https://github.com/codenvy/codenvy/issues


        1. igor_suhorukov
          08.12.2016 10:23
          +1

          Не можете подключиться к терминалу если некоторое время не работали со средой разработки, то автоматически по таймауту останавливается контейнер. Надо его принудительно запустить.


          1. EGlaz
            08.12.2016 10:30
            +1

            Спасибо.
            Сейчас, после того как перезашёл, перезапустил workspace заработало.
            Наконец-то увидел «hello world che».
            После IDEA непривычная среда.


            1. igor_suhorukov
              08.12.2016 10:33

              Похоже, что экономия ресурсов от codenvy запутает кого угодно) Согласен, что непривычно


  1. 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 совсем другое дело.


  1. navrocky
    07.12.2016 22:45
    +1

    IDE очень слабенькая особенно если не java код, дополнение вообще отсутствует. А так конечно забавно и для хеллоуворлдов пойдет. По крайней мере на данный момент.
    Попробовал локально в докере поднять — поднялось с пол пинка, все работает отлично.


  1. booratina
    15.12.2016 12:21

    Я думаю для новичка сложновато!))