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
вызывает ошибки при компиляции классов из командной строки. Кроме того, мы видели несколько других ошибок, связанных с неправильным использованием аргументов командной строки как при компиляции, так и при запуске автономных приложений.