JavaRush /Java блог /Random UA /Компіляція та запуск Java без IDE
Ve4niY
14 рівень

Компіляція та запуск Java без IDE

Стаття з групи Random UA
Свого часу на reddit.com , у темі Компіляція та запуск Java без IDE , було поставлене питання: Чи є команда, яка компілює групу файлів Java, які знаходяться всередині пакета в окрему папку (назвемо її bin ), і як би я йти про запуск нових файлів класу? Автор темиКомпіляція та запуск Java без IDE - 1 , kylolink , пояснює: "Коли я починав використання Java, я покладався на Eclipse, щоб зробити всю компіляцію для мене, і просто турбувався про написання коду." Я бачив це питання багато разів, і, насправді, це те, що підштовхнуло мене мої повідомлення в блог системи GPS та інтегрованих середовищ розробки: корисно чи шкідливо? Я люблю потужні сучасні Java IDE, і вони роблять моє життя легше на щоденній основі, але є і переваги, щоб знати, як будувати та запускати прості приклади Java без них. Це повідомлення присвячене тому, як зробити саме це. У моєму блозі навчання Java за допомогою простих тестів, я написав про те, як я іноді люблю використовувати простий текстовий редактор та засоби командного рядка для написання, побудови та запуску простих програм. У мене є досить гарна вистава тепер, як моя багато "

Написання та виконання Java-коду

Щоб зробити приклад наочнішим, я використовуватиму деякі дуже прості Java-класи, які пов'язані один з одним через композиції або успадкування і знаходяться в одному пакеті з ім'ям dustin.examples . У двох класах відсутня функція main, у третьому класі Main.java є функція main, яка дозволяє продемонструвати запуск класу без IDE. Нижче наведено код цих трьох класів: Parent.java
package dustin.examples;

public class Parent
{
   @Override
   public String toString()
   {
      return "I'm the Parent.";
   }
}
Child.java
package dustin.examples;

public class Child extends Parent
{
   @Override
   public String toString()
   {
      return "I'm the Child.";
   }
}
Main.java
package dustin.examples;

import static java.lang.System.out;

public class Main
{
   private final Parent parent = new Parent();
   private final Child child = new Child();

   public static void main(final String[] arguments)
   {
      final Main instance = new Main();
      out.println(instance.parent);
      out.println(instance.child);
   }
}
На наступному скріншоті показана структура каталогів з цими класами . java . SRC. Я також створив підкаталог класів (який зараз порожній) для розміщення скомпілованих файлів .class тому Javac не створить цей каталог, коли він не існує.

Будівля з JAVAC та запуск з Java

Незалежно від того, який підхід один використовує для створення Java-коду (Ant, Maven, Gradle або IDE), це в кінцевому рахунку зводиться до JAVAC. Стандартні параметри в Oracle/Sun наданий інструмент JAVAC командного рядка можна побачити, запустивши JAVAC -help і додаткові опції розширення можуть бути переглянуті, запустивши JAVAC -help -X. Докладніше про те, як застосовувати ці варіанти можна знайти в документації інструментів для JAVAC для Windows або Unix / Linux. Як говориться в документації Javac, опцію -sourcepath можна використовувати, щоб виразити каталог, в якому існує вихідні файли. У моїй структурі каталогів, показаного на знімку екрана вище, це означає, що, припускаючи, що я біжу команду JAVAC з C: Java прикладів javacAndJava директоріїя повинен був би мати щось подібне в моїй команді: Javac -sourcepath SRC SRC \ Дастін \ приклади \ *. Java . Наступне зображення екрана показує результати цього. Компіляція та запуск Java без IDE - 2Тому що ми не вказати каталог для файлів .class , вони були розміщені за замовчуванням у тому ж каталозі, що й вихідний файли .java , з яких вони були складені. Ми можемо використовувати опцію -d, щоб виправити цю ситуацію. Наша команда може бути запущена зараз, наприклад, як Javac -sourcepath SRC -d класів SRC \ Дастін \ приклади \ *. Яви . Як зазначалося раніше, обрану папку (класи) вже мають існувати. Коли це станеться, команда помістить .class файли у вказану папку, як показано на наступному знімку екрана Компіляція та запуск Java без IDE - 3З вихідні файли Java складено у відповідні .class файлів у зазначеній директорії, ми можемо запустити програму, використовуючи меню швидкого запуску інструменту командного рядка Java Java. Це просто зробити, дотримуючись інструкцій, наведених на Java-help або сторінки ява інструментів і вказавши розташування файлів .class з опцією -classpath(або -cp). Використання обох підходів вказати, що каталоги класи, де шукати файли .class демонструється в наступному знімку екрана. Останнім аргументом є повне (весь пакет Java) ім'я класу, який має головну функцію, яка буде виконана. Команди продемонстрували в наступному знімку екрану класи Java -cp dustin.examples.Main і класи Java -classpath dustin.examples.Main. Компіляція та запуск Java без IDE - 4

Побудова та запуск з Ant

Для найпростіших програм Java, це досить проста у використанні JAVAC і Java для створення і запуску програми, відповідно, як тільки що продемонстрували. Як додатки отримати трохи складніше (наприклад, код існуючої в більш ніж один пакет / каталог або складніших класів залежностей від сторонніх бібліотек та фреймворків), такий підхід може стати громіздким. Apache Ant є найстарішим з "великої трійки" Яви побудувати інструменти і був використаний у тисячі додатків та розгортання. Як я вже говорив у попередньому пості блогу, дуже простий Ant побудувати файл легко створити, особливо якщо починається з шаблону, як я виклав на цій посаді. Наступний список коду призначений для файлу Ant build.xml , яку можна використовувати для складання .javaфайли в файли .class, а потім запустити клас dustin.examples.Main як це було зроблено вище з JAVAC і Java. build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="BuildingSansIDE" default="run" basedir=".">
   <description>Building Simple Java Applications Without An IDE</description>

   <target name="compile"
           description="Compile the Java code.">
      <javac srcdir="src"
             destdir="classes"
             debug="true"
      includeantruntime="false" />
   </target>

   <target name="run" depends="compile"
           description="Run the Java application.">
      <java classname="dustin.examples.Main" fork="true">
         <classpath>
           <pathelement path="classes"/>
         </classpath>
      </java>
   </target>
</project>
Я не використовував Ant властивості і не входить загальних цілей я зазвичай включають (наприклад, "чистих" і "Javadoc"), щоб зберегти цей приклад якомога простішим і тримати його близько до попереднього прикладу за допомогою JAVAC і Java. Відзначимо також, що я ввімкнув "налагодження" встановлений на "справжній" для JAVAC Ant завдання, тому що це не так у разі відмови Ant, але вірно за замовчуванням JAVAC в. Не дивно, Javac завдання та Java завдання Мурашки нагадують JAVAC команда інструменти та Java. Тому що я використовував ім'я за замовчуванням Ant чекає файлу збирання, коли він не вказано явно (build.xml) і тому що я надав "Виконати" ціль як "за замовчуванням" для цього збирання і тому, що я включений "компілювати" як залежність запустити "Run"build.xml . Це показано у наступному знімку екрана. Компіляція та запуск Java без IDE - 5Хоча я продемонстрував компіляції та виконання простого додатка Java з Ant, я, як правило, тільки компілювати з Ant і бігти з Java (або скрипт, який викликає Java, якщо шлях до класів є тяжкими).

Побудова та запуск з Maven

Хоча Ant був перший основний інструмент Java збірки, Apache Maven зрештою здобули свою популярність багато в чому завдяки його прийняттю конфігурації відповідно до угоди та підтримки спільних сховищ бібліотек. Maven є простим у використанні, коли код та згенеровані об'єкти відповідають його стандартній схемі директорій. На жаль, мій приклад не слідує цю структуру каталогів, але Maven дійсно дозволяє нам перевизначити очікувану структуру каталогів за замовчуванням. Наступний список код для POM файл Maven, який використовується замість каталоги вихідні та цільові та забезпечує інші мінімально необхідні елементи для Maven побудувати за допомогою Maven 3.2.1. pom.xml
<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>dustin.examples</groupId>
   <artifactId>CompilingAndRunningWithoutIDE</artifactId>
   <version>1</version>

   <build>
      <defaultGoal>compile</defaultGoal>
      <sourceDirectory>src</sourceDirectory>
      <outputDirectory>classes</outputDirectory>
      <finalName>${project.artifactId}-${project.version}</finalName>
   </build>
</project>
Оскільки вище файл pom.xml визначає "defaultGoal" з "скомпілювати" і тому pom.xml файлів POM за замовчуванням звичай, що Maven виконуваний (МВН) шукає і тому каталог бен установку Maven знаходиться на моєму шляху, тільки я необхідні для запуску "MVN " для компіляції файли .class як зазначено у наступному знімку екрана." Компіляція та запуск Java без IDE - 6Я можу також запустити скомпілюваний додаток з Maven за допомогою командної Mvn Exec: Java -Dexec.mainClass = dustin.examples.Main , який спостерігається на наступному знімку екрана. Компіляція та запуск Java без IDE - 7Як і у випадку з Ant, я, як правило, не використовувати Maven для запуску мій простий Java програми, а замість цього використовувати Java на скомпільований код (або використовувати сценарій, що викликає Java безпосередньо протягом тривалого класу).

Побудова та запуск із Gradle

Gradle є наймолодшим, модним і стильним з трьох основних інструментів Java складання. Я іноді скептично ставляться до істоти те, що є модним, але я знайшов багато речей, щоб подобається Gradle (написаної в Groovy замість XML, вбудований в Ant підтримки, вбудованою підтримкою Ivy, конфігурації за угодою, яка легко переналаштована , підтримка сховища Maven, та і т.д.). Наступний приклад показує складання Gradle, який можна використовувати, щоб скомпілювати і запустити простий додаток, який є основним прикладом коду для цього посту. Цей адаптований приклад я представив у блозі Simple Gradle Java Plugin Customization. build.gradle
apply plugin: 'java'
apply plugin: 'application'

// Redefine where Gradle should expect Java source files (*.java)
sourceSets {
    main {
        java {
            srcDirs 'src'
        }
    }
}

// Redefine where .class files are written
sourceSets.main.output.classesDir = file("classes")

// Specify main class to be executed
mainClassName = "dustin.examples.Main"

defaultTasks 'compileJava', 'run'
Перші два рядки з файлу build.gradleвказати застосування плагіна Java і плагіном Application, в результаті чого купу функціональності автоматично збирається. Визначення "sourceSets" і "sourceSets.main.output.classesDir" дозволяє перекривати каталогів за замовчуванням Java плагіна Gradle для вихідного коду Java і скомпільованих двійкових класів відповідно. "MainClassName" дозволяє явною вказівкою, який клас повинен бути запущений в рамках плагіна Application. "defaultTasks" визначає завдання, які будуть працювати, просто набравши "Gradle" у командному рядку: 'compileJava' є стандартним завданням забезпечується плагіном Java і "Виконати" є стандартним завданням забезпечується плагіном Application. Тому що я назвав складання build.gradle і тому я вказав задач за замовчуванням 'compileJava" Компіляція та запуск Java без IDE - 8Навіть найбільший скептик повинен визнати, що Gradle складання дуже слизький для цього простого прикладу. Вона поєднує в собі лаконічність від спираючись на певні конвенцій та припущень з дуже легкою механізму перевизначення виберіть за умовчанням у разі потреби. Той факт, що він знаходиться в Groovy замість XML є також дуже привабливим! Як і у випадку з Ant і Maven, я, як правило, побудувати тільки за допомогою цих інструментів і, як правило, працювати скомпіловані файли .class безпосередньо з Java або скрипта, який викликає Java. До речі, я, як правило, також архівувати ці .class в баночку для запуску, але це виходить за межі цієї статті.

Висновок

IDE часто немає необхідності для побудови простих додатків і прикладів і може бути навіть більш накладні, ніж це варто для найпростіших прикладів. У такому випадку це досить легко застосовувати JAVAC і Java безпосередньо побудувати і запустити приклади. Як приклади брати активнішу участь, інструмент для складання, такі як Ant, Maven, або Gradle стає більш привабливим. Той факт, що багато середовища розробки підтримують ці утиліти складання означає, що розробник може перейти в IDE за допомогою вбудованого інструменту, створеного раніше в процесі, якщо було визначено, що підтримка IDE була потрібна як простий додаток переросла в повноцінний проект.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ