一、概述
在命令行上编译Java 程序时,预期命令行选项或参数中的任何不匹配都会导致错误。
在本教程中,我们将首先调查“Class Names Are Only Accepted if Annotation Processing Is Explicitly Requested”
错误。然后,我们将看看其他一些常见的编译错误。
2. 错误示例
假设我们有以下类DemoClass
:
package org.1ju;
public class DemoClass {
// fields and methods
}
现在,让我们尝试使用javac
命令编译DemoClass
:
javac DemoClass
上面的命令会报错:
error: Class names, 'DemoClass', are only accepted if annotation processing is explicitly requested
1 error
该错误似乎与注释处理有关,并且有点神秘,因为DemoClass
没有与注释处理相关的代码。此错误的实际原因是**DemoClass
不是注释处理源文件**。
注释处理源文件是一种在编译时生成附加源代码的便捷技术。与标准Java 源文件相比,要编译这些源文件,不需要提供.java
文件扩展名.
3. 解决问题
让我们使用正确的文件扩展名.java
再次编译DemoClass
:
javac DemoClass.java
正如预期的那样,我们将源文件编译成DemoClass.class
文件。
4. 其他提示和技巧
当我们知道正确的编译方式时,这很容易解决,但在编译或运行应用程序时,我们仍然可能会遇到类似的困难。
4.1.主类错误
假设我们有一个DemoApplication
类,它有一个main
方法:
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
4.2.使用不正确的文件扩展名
现在让我们尝试使用以下命令编译源文件,该命令有一个拼写错误- 全部大写的“ .JAVA”
:
javac DemoClass.JAVA
这样做会产生与我们在上面看到的相同的错误消息:
error: Class names, 'DemoClass.JAVA', are only accepted if annotation processing is explicitly requested
1 error
5. 结论
在本文中,我们了解了.java
文件扩展名的不正确使用或省略如何在从命令行编译类时导致错误。此外,我们还看到了一些其他错误,这些错误与编译和运行独立应用程序时命令行参数的错误使用有关。
0 评论