Java compile only one class

Компиляция файлов Java *.class с помощью javac

В этом руководстве будет представлен инструмент javac и описано, как использовать его для компиляции исходных файлов Java в файлы классов.

Мы начнем с краткого описания команды javac , а затем более подробно рассмотрим этот инструмент, рассмотрев его различные параметры.

2. Команда javac

Мы можем указать параметры и исходные файлы при выполнении инструмента javac :

 javac [options] [source-files] 

Где [options] обозначает параметры, управляющие работой инструмента, а [source-files] указывает один или несколько исходных файлов, которые необходимо скомпилировать.

Все опции действительно необязательны. Исходные файлы могут быть напрямую указаны в качестве аргументов для команды javac или сохранены в файле аргументов, на который ссылаются, как описано ниже. Обратите внимание, что исходные файлы должны располагаться в иерархии каталогов, соответствующей полным именам содержащихся в них типов .

Опции javac делятся на три группы: стандартные, кросс-компиляция и дополнительные. В этой статье мы сосредоточимся на стандартных и дополнительных опциях.

Параметры кросс-компиляции используются для менее распространенного случая компиляции определений типов для реализации JVM, отличной от среды компилятора, и не будут рассматриваться.

3. Определение типа

Давайте начнем с представления класса, который мы собираемся использовать для демонстрации параметров javac :

 public class Data    ListString> textList = new ArrayList();    public void addText(String text)    textList.add(text);   >    public List getTextList()    return this.textList;   >   > 

Исходный код размещен в файле com/foreach/javac/Data.java .

Обратите внимание, что в этой статье мы используем разделители файлов *nix; на машинах Windows мы должны использовать обратную косую черту (‘ \’ ) вместо прямой косой черты (‘ /’ ).

4. Стандартные варианты

Одной из наиболее часто используемых стандартных опций команды javac является -d , указывающая каталог назначения для сгенерированных файлов классов . Если тип не является частью пакета по умолчанию, создается структура каталогов, отражающая имя пакета, чтобы сохранить файл класса этого типа.

Давайте выполним следующую команду в каталоге, содержащем структуру, представленную в предыдущем разделе:

 javac -d javac-target com/foreach/javac/Data.java 

Компилятор javac создаст файл класса javac-target/com/foreach/javac/Data.class . Обратите внимание, что в некоторых системах javac не создает автоматически целевой каталог, которым в данном случае является javac-target . Поэтому нам может потребоваться сделать это вручную.

Вот еще несколько часто используемых опций:

  • -cp (или -classpath , –class -path ) — указывает, где можно найти типы, необходимые для компиляции наших исходных файлов. Если этот параметр отсутствует и переменная среды CLASSPATH не задана, вместо нее используется текущий рабочий каталог (как в примере выше).
  • -p (или —module-path ) – указывает расположение необходимых модулей приложения. Эта опция применима только к Java 9 и более поздним версиям — пожалуйста, обратитесь к этому руководству за руководством по модульной системе Java 9.

Если мы хотим знать, что происходит в процессе компиляции, например, какие классы загружаются, а какие компилируются, мы можем применить опцию -verbose .

Последним стандартным вариантом, который мы рассмотрим, является файл аргументов. Вместо того, чтобы передавать аргументы непосредственно инструменту javac , мы можем хранить их в файлах аргументов . Имена этих файлов с префиксом ‘@ ‘ затем используются в качестве аргументов команды.

Когда команда javac встречает аргумент, начинающийся с ‘@ ‘ , она интерпретирует следующие символы как путь к файлу и расширяет содержимое файла в список аргументов. Пробелы и символы новой строки могут использоваться для разделения аргументов, включенных в такой файл аргументов.

Предположим, у нас есть два файла с именами options и types в каталоге javac-args со следующим содержимым:

Источник

Компиляция файлов Java *.class с помощью javac

Узнайте, как использовать javac для создания файлов *.class.

1. Обзор

В этом руководстве будет представлен инструмент javac и описано, как использовать его для компиляции исходных файлов Java в файлы классов.

Мы начнем с краткого описания команды javac , а затем рассмотрим инструмент более подробно, рассмотрев его различные варианты.

2. Команда javac

Мы можем указать параметры и исходные файлы при выполнении инструмента javac :

javac [options] [source-files]

Где [параметры] обозначает параметры, управляющие операциями инструмента, и [исходные файлы] указывает один или несколько исходных файлов, которые будут скомпилированы.

Все варианты действительно совершенно необязательны. Исходные файлы могут быть непосредственно указаны в качестве аргументов команды javac или сохранены в файле аргументов, на который ссылается ссылка, как описано ниже. Обратите внимание, что исходные файлы должны быть расположены в иерархии каталогов, соответствующей полным именам типов, которые они содержат .

Параметры javac подразделяются на три группы: стандартные, кросс-компиляционные и дополнительные. В этой статье мы сосредоточимся на стандартных и дополнительных опциях.

Параметры кросс-компиляции используются для менее распространенного случая компиляции определений типов в реализации JVM, отличной от среды компилятора, и не будут рассматриваться.

3. Определение типа

Давайте начнем с представления класса, который мы собираемся использовать для демонстрации опций javac :

public class Data < ListtextList = new ArrayList(); public void addText(String text) < textList.add(text); >public List getTextList() < return this.textList; >>

Исходный код помещается в файл com/baeldung/javac/Data.java .

Обратите внимание, что в этой статье мы используем разделители файлов *unix; на компьютерах с Windows мы должны использовать обратную косую черту (‘ \’ ) вместо прямой косой черты (‘ /’ ).

4. Стандартные опции

Одним из наиболее часто используемых стандартных параметров команды javac является -d , указывающий каталог назначения для сгенерированных файлов классов . Если тип не является частью пакета по умолчанию, создается структура каталогов, отражающая имя пакета, чтобы сохранить файл класса этого типа.

Давайте выполним следующую команду в каталоге, содержащем структуру, представленную в предыдущем разделе:

javac -d javac-target com/baeldung/javac/Data.java

Компилятор javac сгенерирует файл класса javac-target/com/baeldung/javac/Data.class . Обратите внимание, что в некоторых системах javac не создает автоматически целевой каталог, который в данном случае является javac-target . Поэтому, возможно, нам придется сделать это вручную.

Вот несколько других часто используемых вариантов:

  • -cp(или-classpath,–class-path) – указывает, где можно найти типы, необходимые для компиляции наших исходных файлов. Если этот параметр отсутствует, а переменная среды CLASSPATH не задана, вместо этого используется текущий рабочий каталог (как это было в приведенном выше примере).
  • -p(или–путь к модулю) – указывает расположение необходимых прикладных модулей. Эта опция применима только к Java 9 и выше – пожалуйста, обратитесь к этому учебнику для руководства по системе модулей Java 9.

Если мы хотим знать, что происходит в процессе компиляции, например, какие классы загружаются и какие компилируются, мы можем применить параметр -verbose .

Последний стандартный вариант, который мы рассмотрим, – это файл аргументов. Вместо того, чтобы передавать аргументы непосредственно инструменту javac , мы можем хранить их в файлах аргументов . Имена этих файлов с префиксом “@ затем используются в качестве аргументов команды.

Когда команда javac встречает аргумент , начинающийся с’@ , она интерпретирует следующие символы как путь к файлу и расширяет содержимое файла в список аргументов. Пробелы и символы новой строки могут использоваться для разделения аргументов, включенных в такой файл аргументов.

Предположим, что у нас есть два файла с именами options и types в каталоге javac-args со следующим содержимым:

Мы можем скомпилировать тип Data , как и раньше, с подробными сообщениями, напечатанными на консоли, выполнив эту команду:

javac @javac-args/options @javac-args/types

Вместо того, чтобы хранить аргументы в отдельных файлах, мы также можем хранить их все в одном файле .

Предположим, что в каталоге javac-args есть файл с именем arguments :

-d javac-target -verbose com/baeldung/javac/Data.java

Давайте передадим этот файл в javac , чтобы получить тот же результат, что и с двумя отдельными файлами до :

Обратите внимание, что варианты, которые мы рассмотрели в этом разделе, являются наиболее распространенными. Для получения полного списка стандартных javac опций ознакомьтесь с этой ссылкой .

5. Дополнительные опции

Дополнительные параметры javac -это нестандартные параметры, которые специфичны для текущей реализации компилятора и могут быть изменены в будущем. Поэтому мы не будем подробно рассматривать эти варианты.

Однако есть вариант, который очень полезен и заслуживает упоминания, -Xlint . Для получения полного описания других javac дополнительных опций перейдите по этой ссылке .

Опция -Xlint позволяет нам включать предупреждения во время компиляции . Существует два способа указать этот параметр в командной строке:

  • -Xlint – запускает все рекомендуемые предупреждения
  • -Xlint:клавиша[,клавиша]* – включает определенные предупреждения

Вот некоторые из самых удобных -Xlint клавиш:

  • rawtypes – предупреждает об использовании необработанных типов
  • unchecked – предупреждает о непроверенных операциях
  • static – предупреждает о доступе к статическому члену от члена экземпляра
  • cast – предупреждает о ненужных бросках
  • serial – предупреждает о том, что сериализуемые классы не имеют serialVersionUID
  • fallthrough – предупреждает о провале в операторе switch

Теперь создайте файл с именем xl в tops в каталоге javac-args со следующим содержимым:

-d javac-target -Xlint:rawtypes,unchecked com/baeldung/javac/Data.java

При выполнении этой команды:

мы должны увидеть rawtypes и непроверенные предупреждения:

com/baeldung/javac/Data.java:7: warning: [rawtypes] found raw type: ArrayList List textList = new ArrayList(); ^ missing type arguments for generic class ArrayList where E is a type-variable: E extends Object declared in class ArrayList com/baeldung/javac/Data.java:7: warning: [unchecked] unchecked conversion List textList = new ArrayList(); ^ required: List found: ArrayList . 

6. Заключение

В этом учебном пособии описан инструмент javac , показывающий, как использовать параметры для управления типичным процессом компиляции.

На самом деле мы обычно компилируем программу с помощью IDE или инструмента сборки, а не напрямую полагаемся на javac . Однако глубокое понимание этого инструмента позволит нам настроить компиляцию в расширенных случаях использования.

Как всегда, исходный код этого учебника можно найти на GitHub .

Источник

Читайте также:  Javascript checkbox checked установить
Оцените статью