Jul 29, 2025
Jul 29, 2025
N/A Views
MD

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のサンプルで試してみます。

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の情報を事前に保存しておいて、

./mvnw dependency:build-classpath -q -Dmdep.outputFile=/dev/stdout > build-classpath.txt

実行時に参照すると起動が速くなります。

java -cp target/classes:$(cat build-classpath.txt) com.example.DemoApplication

pom.xmlに変更があればbuild-classpath.txtの更新を忘れずに。

Found a mistake? Update the entry.
Share this article: