Note on Running the Main Class of a Maven Project Directly with the java Command
⚠️ This article was automatically translated by OpenAI API (ggml-org/gpt-oss-120b-GGUF). It may be edited eventually, but please be aware that it may contain incorrect information at this time.
To run a class that contains the main method in a Java project created with Maven, we often use the mvn exec:java command, mvn spring-boot:run, or create an executable JAR and run it with java -jar. However, I discovered that it can also be run directly with the java command, so here's a note.
After mvn compile,
java -cp target/classes:$(mvn dependency:build-classpath -q -Dmdep.outputFile=/dev/stdout) com.example.changeme.Main
Replace the com.example.changeme.Main part with your own class.
The point is that the mvn dependency:build-classpath -q -Dmdep.outputFile=/dev/stdout command can output all the JAR paths it references in one go.
Let's try it with a Spring Boot sample.
curl -s https://start.spring.io/starter.tgz \
-d artifactId=demo \
-d name=demo \
-d baseDir=demo \
-d packageName=com.example \
-d type=maven-project \
-d applicationName=DemoApplication | tar -xzvf -
cd demo
./mvnw compile
java -cp target/classes:$(./mvnw dependency:build-classpath -q -Dmdep.outputFile=/dev/stdout) com.example.DemoApplication
The Spring Boot application starts correctly.
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.5.4)
2025-07-29T10:34:00.953+09:00 INFO 94084 --- [demo] [ main] com.example.DemoApplication : Starting DemoApplication using Java 21 with PID 94084 (/private/tmp/demo/target/classes started by tmaki in /private/tmp/demo)
2025-07-29T10:34:00.954+09:00 INFO 94084 --- [demo] [ main] com.example.DemoApplication : No active profile set, falling back to 1 default profile: "default"
2025-07-29T10:34:01.137+09:00 INFO 94084 --- [demo] [ main] com.example.DemoApplication : Started DemoApplication in 0.347 seconds (process running for 0.499)
If you run it repeatedly, you can save the build‑classpath information in advance,
./mvnw dependency:build-classpath -q -Dmdep.outputFile=/dev/stdout > build-classpath.txt
Referencing it at runtime speeds up the startup.
java -cp target/classes:$(cat build-classpath.txt) com.example.DemoApplication
If there are changes to pom.xml, don't forget to update build-classpath.txt.