1.

No goals have been specified for this build. You must specif

▶
この記事の要点
  • Maven に「何をするか(フェーズまたはゴール)」を指定せずに実行したときのエラー
  • コマンドなら mvn の後に package や clean install などを付ければ解決する
  • Eclipse の「Maven ビルド...」でゴール欄が空のまま実行しても同じエラーになる
  • mvn だけで動かしたいなら pom.xml に <defaultGoal> を書く
  • フェーズは前の段階を全部含んで実行される(package なら compile・test も走る)

エラー内容

[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]

日本語にすると「このビルドにはゴールが指定されていません。有効なライフサイクルフェーズか、<plugin-prefix>:<goal> 形式のゴールを指定してください」という意味です。後半には指定できるフェーズの一覧が表示されています。

原因

Maven は「どこまでビルドするか」を毎回指定して実行するツールです。mvn コマンドにフェーズやゴールを 1 つも渡さず、pom.xml にも既定のゴールが書かれていないと、何をすればよいか分からずにこのエラーで止まります。よくある発生パターンは次のとおりです。

  • ターミナルで mvn だけを実行した(オプションだけ付けた mvn -DskipTests なども同じ)
  • Eclipse で「実行」→「Maven ビルド...」を選び、構成画面の「ゴール」欄を空のまま実行した
  • IntelliJ IDEA などの実行構成で、コマンドライン欄が空になっている
  • CI のスクリプトでゴールを変数で渡していて、その変数が空だった

対処法

コマンドで実行する場合

目的に合ったフェーズを指定します。迷ったら clean package が無難です。

# コンパイルだけ
mvn compile

# テストまで実行して jar / war を作る
mvn clean package

# 作った成果物をローカルリポジトリ (~/.m2) に登録する
mvn clean install

# テストを飛ばしてパッケージングする
mvn clean package -DskipTests

プラグインのゴールを直接指定することもできます。これがエラーメッセージにある <plugin-prefix>:<goal> 形式です。

mvn dependency:tree        # 依存関係のツリーを表示
mvn spring-boot:run        # Spring Boot アプリを起動(プラグイン設定がある場合)

Eclipse で実行する場合

  1. プロジェクトを右クリック →「実行」→「Maven ビルド...」(末尾に「...」が付いているほう)を選ぶ
  2. 「ゴール」欄に clean package などを入力する
  3. 「実行」を押す

「...」なしの「Maven ビルド」は、前回保存した実行構成を使います。最初にゴール欄を空のまま保存してしまうと、毎回このエラーになります。その場合は「実行」→「実行構成」から該当する構成を開き、ゴール欄を埋めてください。メニューにある「Maven install」「Maven clean」などを使うと、ゴールが入った状態で実行されます。

mvn だけで動くようにしたい場合

pom.xml の <build> に <defaultGoal> を書くと、引数なしの mvn でもそのゴールが実行されます。

<build>
  <defaultGoal>clean package</defaultGoal>
  <!-- plugins などはそのまま -->
</build>

主なフェーズの早見表

Maven の標準ライフサイクルでは、指定したフェーズより前のフェーズもすべて順番に実行されます。たとえば mvn package は validate → compile → test → package の順に進みます。

フェーズやること
compilesrc/main/java をコンパイルする
test単体テストを実行する
packagejar や war を target/ に作る
verify結合テストや品質チェックを実行する
install成果物をローカルリポジトリに登録する(他のプロジェクトから参照できる)
deploy成果物をリモートリポジトリにアップロードする
cleantarget/ を削除する(別のライフサイクル。clean package のように並べて使う)

確認方法

  • 実行して最後に BUILD SUCCESS と表示され、target/ に jar や war ができていれば成功です
  • mvn -v で、Maven 本体と使われている Java のバージョンも確認しておくと、次に出るエラーの切り分けが楽になります

関連

子ページ

子ページはありません

同階層のページ
  1. No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format
  2. Fatal error compiling: 1.Xは無効なターゲット・リリースです

最近更新/作成されたページ