Перейти к основному содержимому

Распространенные ошибки компиляции командной строки в Java

· 3 мин. чтения

1. Обзор

Предполагается, что при компиляции Java-программ в командной строке любое несоответствие в ожидаемых параметрах или аргументах командной строки приведет к ошибке.

В этом руководстве мы сначала исследуем ошибку «Имена классов принимаются только в том случае, если обработка аннотаций запрошена явным образом» . Затем мы рассмотрим некоторые другие распространенные ошибки компиляции.

2. Пример ошибки

Представим, что у нас есть следующий класс DemoClass :

package com.foreach;

public class DemoClass {
// fields and methods
}

Теперь попробуем скомпилировать DemoClass с помощью команды javac :

javac DemoClass

Приведенная выше команда выдаст ошибку:

error: Class names, 'DemoClass', are only accepted if annotation processing is explicitly requested
1 error

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

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

3. Решение проблемы

Давайте снова скомпилируем DemoClass с правильным расширением имени файла .java :

javac DemoClass.java

Как и ожидалось, исходный файл будет скомпилирован в файл DemoClass.class .

4. Дополнительные советы и рекомендации

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

4.1. Использование неправильного расширения файла

Давайте теперь попробуем скомпилировать исходный файл с помощью приведенной ниже команды, в которой есть опечатка — « .JAVA» в верхнем регистре:

javac DemoClass.JAVA

Это приведет к тому же сообщению об ошибке, которое мы видели выше:

error: Class names, 'DemoClass.JAVA', are only accepted if annotation processing is explicitly requested
1 error

4.2. Ошибка основного класса

Давайте представим, что у нас есть класс DemoApplication с основным методом:

public class DemoApplication {

public static void main(String[] args) {
System.out.println("This is a DemoApplication");
}
}

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

java DemoApplication.class

Результатом является ClassNotFoundException :

Error: Could not find or load main class DemoApplication.Class
Caused by: java.lang.ClassNotFoundException: DemoApplication.Class

Теперь давайте попробуем запустить приложение без каких-либо расширений файлов — даже .class или .java :

java DemoApplication

Мы должны увидеть вывод на нашей консоли:

This is a DemoApplication

5. Вывод

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