一、概述
在命令行上编译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 评论