1. Overview

When compiling Java programs on the command line, it’s expected that any mismatch in the expected command-line options or arguments will result in an error.

In this tutorial, we’ll first investigate the “Class Names Are Only Accepted if Annotation Processing Is Explicitly Requested” error. Then, we’ll look at some other common compile errors.

2. Example of Error

Let’s imagine we have the following class DemoClass:

package com.baeldung;

public class DemoClass {
    // fields and methods
}

Now, let’s try to compile the DemoClass using the javac command:

javac DemoClass

The above command will give an error:

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

The error seems to be related to annotation processing and is a bit cryptic since the DemoClass has no code related to annotation processing. The actual reason for this error is the DemoClass is not an annotation processing source file.

Annotation processing source files are a handy technique for generating additional source code at compile time. In contrast to standard Java source files, to compile these source files, it’s not required to provide the .java file extension.

3. Solving the Problem

Let’s compile the DemoClass again with the correct file name extension .java:

javac DemoClass.java

As expected, we’ll get the source file compiled into DemoClass.class file.

4. Additional Tips and Tricks

While it’s an easy fix when we know the correct way to compile, we may still encounter similar difficulties while compiling or running applications.

 4.1. Using Incorrect File Extension

Let’s now try to compile the source file with the below command which has a typo – “.JAVA” in all uppercase:

javac DemoClass.JAVA

Doing this will produce the same error message we saw above:

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

4.2. Main Class Error

Let’s imagine we have a DemoApplication class that has a main method:

public class DemoApplication {

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

Let’s now execute the application using the java command:

java DemoApplication.class

The result is a ClassNotFoundException:

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

Now, let’s try running the application without any file extension – not even .class or .java:

java DemoApplication

We should see the output on our console:

This is a DemoApplication

5. Conclusion

In this article, we’ve learned how the incorrect usage or omission of the .java file extension causes errors when compiling classes from the command line. Also, we’ve seen a few other errors related to the incorrect usage of command-line arguments both compiling and running standalone applications.

Course – LS (cat=Java)

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE
res – REST with Spring (eBook) (everywhere)
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.