--- title: Mavenプロジェクトのmainクラスを直接javaコマンドで実行するメモ tags: ["Maven", "Java", "Spring Boot"] categories: ["Programming", "Java", "Maven"] date: 2025-07-29T01:34:48Z updated: 2025-07-29T01:40:12Z --- Mavenで作ったJavaプロジェクトの`main`メソッドのあるクラスを実行するには`mvn exec:java`コマンドを使ったり`mvn spring-boot:run`を使ったり、 あるいは実行可能jarファイルを作成して`java -jar`で実行することが多かったですが、直接`java`コマンドでも実行できることがわかったのでメモ。 `mvn compile`の後、 ``` java -cp target/classes:$(mvn dependency:build-classpath -q -Dmdep.outputFile=/dev/stdout) com.example.changeme.Main ``` `com.example.changeme.Main`の部分を置換してください。 `mvn dependency:build-classpath -q -Dmdep.outputFile=/dev/stdout`コマンドで参照しているjarのパスをまとめて出力できるのがポイントですね。 Spring Bootのサンプルで試してみます。 ```bash 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 ``` ちゃんとSpring Bootアプリケーションが起動します。 ``` . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: 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) ``` 何度も実行する場合は、build-classpathの情報を事前に保存しておいて、 ```bash ./mvnw dependency:build-classpath -q -Dmdep.outputFile=/dev/stdout > build-classpath.txt ``` 実行時に参照すると起動が速くなります。 ```bash java -cp target/classes:$(cat build-classpath.txt) com.example.DemoApplication ``` `pom.xml`に変更があれば`build-classpath.txt`の更新を忘れずに。