JavaRush /Java блог /Архив info.javarush /Компиляция и запуск Java без IDE
Ve4niY
14 уровень

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

Статья из группы Архив info.javarush
В свое время на reddit.com, в теме Компиляция и запуск Java без IDE, был задан вопрос: Является ли команда, которая компилирует группу файлов Java, которые находятся внутри пакета в отдельную папку (назовем ее bin), и как бы я идти о запуске новых файлов класса? " Компиляция и запуск Java без IDE - 1Автор темы, kylolink, объясняет: "Когда я начинал использование Java, я полагался на Eclipse, чтобы сделать всю компиляцию для меня, и просто беспокоился о написании кода." Я видел этот вопрос много раз, и, в самом деле, это то, что подтолкнуло меня мои сообщение в блог системы GPS и интегрированных сред разработки: полезно или вредно? Я люблю мощные современные Java IDE, и они делают мою жизнь легче на ежедневной основе, но есть и преимущества, чтобы знать, как строить и запускать простые примеры Java без них. Это сообщение посвящено тому, как сделать именно это. В моем блоге обучения Java с помощью простых тестов, я написал о том, как я иногда люблю использовать простой текстовый редактор и средства командной строки для написания, построения и запуска простых приложений. У меня есть довольно хорошее представление теперь, как моя много "накладные расходы" мои любимые IDE для Java требуют и сделать раннее решение, являются ли преимущества, достигнутые с помощью интегрированной среды достаточно, чтобы оправдать "накладные расходы". В большинстве реальных приложений, нет никаких сомнений, IDE «ВЛ», дорогого стоит. Тем не менее, для простейших примеров приложений, это не всегда так. В остальной части этой должности показывает, как построить и запустить Java код без IDE для этих ситуаций.

Написание и выполнение 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.Снимок экрана показывает, что исходные файлы в иерархии каталогов, представляющей имя пакета (dustin/examples, потому что информация о пакете dustin.examples) и что этот пакет отражающей иерархию каталогов находится под подкаталоге 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" цель и потому Ant был на пути моем окружении в, все, что нужно сделать в командной строке, чтобы получить Ant для компиляции и запуска пример типа "муравей" в каталоге с файлом 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 "и" Выполнить "и потому что я есть установочный бен каталог Gradle на моем пути, все, что я должен был сделать, чтобы построить и запустить примеры было введите "Gradle", и это демонстрируется в следующем снимке экрана. Компиляция и запуск Java без IDE - 8Даже самый большой скептик должен признать, что Gradle сборки очень скользкий для этого простого примера. Она сочетает в себе лаконичность от опираясь на определенные конвенций и предположений с очень легкой механизма переопределения выберите по умолчанию в случае необходимости. Тот факт, что он находится в Groovy вместо XML также очень привлекательным! Как и в случае с Ant и Maven, я, как правило, чтобы построить только с помощью этих инструментов и, как правило, работать скомпилированные файлы .class непосредственно с Java или скрипта, который вызывает Java. Кстати, я, как правило, также архивировать эти .class в баночку для запуска, но это выходит за рамки этой статьи.

Заключение

IDE часто нет необходимости для построения простых приложений и примеры и может быть даже более накладные, чем это стоит для простейших примеров. В таком случае, это довольно легко применять JAVAC и Java непосредственно построить и запустить примеры. Как примеры принимать более активное участие, инструмент для сборки, такие как Ant, Maven, или Gradle становится более привлекательным. Тот факт, что многие среды разработки поддерживают эти утилиты сборки означает, что разработчик может перейти в IDE с помощью встроенного инструмента, созданного ранее в процессе, если было определено, что поддержка IDE был нужен как простое приложение переросла в полноценный проект.
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anonymous #2037611 Уровень 8
21 июня 2019
Укажите пожалуйста первоисточник
Roman K Уровень 31
14 апреля 2019
Перевод очень кривой...