---
title: Mavenプロジェクトのmainクラスを直接javaコマンドで実行するメモ
summary: この記事では、MavenでビルドしたJavaプロジェクトを `java -cp` コマンドだけで直接実行する方法と、classpath を事前取得して起動を高速化する手順を紹介します。
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`の更新を忘れずに。
