1.

Maven / Ant / Gradle で "Missing target argument"

編集
この記事の要点
  • Missing target argument.ビルドツールに実行対象(goal / target)が渡されていないときに出るエラー
  • Ant: ant 単体実行 → build.xml のターゲット名指定が必要(例: ant compile
  • Maven: mvn 単体実行 → goal 指定が必要(例: mvn clean install
  • Gradle: gradle 単体実行 → task 指定が必要(例: gradle build
  • build.xmlpom.xml で省略可
  • -h / --help でターゲット一覧表示、ant -p / mvn help:effective-pom でデバッグ

エラーメッセージの全文と発生コマンド

主に Ant でよく見ますが、引数を取るすべての CLI で類似メッセージが出ます:

$ ant
Buildfile: /path/to/build.xml

BUILD FAILED
Missing target argument.

# あるいは Python の argparse
$ python deploy.py
usage: deploy.py [-h] target
deploy.py: error: the following arguments are required: target

原因: ビルドツールに対象を渡していない

ビルドツール(Ant / Maven / Gradle)は 「何をビルドするか」を引数で受け取るのが基本。引数なしで実行すると、デフォルトターゲットが定義されていない限りエラーになります。

Ant の場合




  
    
  

  
    
    
  

  
    
  

  
# NG: 引数なし → Missing target argument
ant

# OK: ターゲット名を指定
ant compile
ant clean compile jar

# OK: default 属性があれば省略可
ant   # → "default=compile" で compile ターゲットが実行される

# 使えるターゲット一覧
ant -p             # = -projecthelp
ant -p -v          # 詳細

Maven の場合

Maven は goal(または phase)が必須です:

# NG: 引数なし → "No goals have been specified for this build."
mvn

# OK: ライフサイクル phase
mvn clean
mvn compile
mvn test
mvn package
mvn install

# OK: 複数連結
mvn clean install

# OK: プラグイン goal
mvn spring-boot:run
mvn dependency:tree

# OK: pom.xml に defaultGoal を設定すれば省略可
# 
#   install
# 

# 使えるライフサイクル / プラグイン
mvn -h
mvn help:describe -Dplugin=compiler

Gradle の場合

# NG: 引数なし → "Welcome to Gradle ..." の help が出るだけ(明示的なビルドはされない)
gradle

# OK: タスク指定
gradle build
gradle test
gradle bootRun
gradle clean assemble

# 使えるタスク一覧
gradle tasks --all
gradle help --task build

# build.gradle の defaultTasks で省略可
# defaultTasks 'clean', 'build'

各ツールの比較

ツール対象の呼び方デフォルト指定一覧
Anttargetant -p
Mavengoal / phasemvn -h
GradletaskdefaultTasksgradle tasks
maketargetMakefile 先頭ルールmake help (慣習)
npmscriptなし(start は特別)npm run

Python argparse の "Missing argument"

類似メッセージは Python の argparse でも出ます:

import argparse

p = argparse.ArgumentParser()
p.add_argument('target', help='deploy target (dev/stg/prd)')
args = p.parse_args()

# 実行
# $ python deploy.py
# usage: deploy.py [-h] target
# deploy.py: error: the following arguments are required: target
#
# $ python deploy.py prd
# (OK)

CI で起きやすいパターン

Jenkins / GitLab CI / GitHub Actions の YAML で mvn 単体や ant 単体を書いてしまうと CI が落ちます:

# NG
- name: Build
  run: mvn

# OK
- name: Build
  run: mvn -B clean install

# OK (Gradle)
- name: Build
  run: ./gradlew build --no-daemon

確認すべきこと

  1. build.xml / pom.xml / build.gradle がカレントディレクトリにあるか
  2. ファイル内に呼び出したいターゲット / goal / task が定義されているか
  3. スペルミス(complie vs compile
  4. 大文字小文字の違い(大半のツールで区別される)
  5. -f オプションで別ファイル指定が必要なケース(ant -f custom.xml compile

FAQ

Q: ant -p でターゲットが出ない
A: 属性付きのターゲットだけ表示される仕様。属性なしは ant -p -v で表示。

Q: Maven で No plugin found エラーに変わった
A: goal の指定方法(plugin:goal 形式)が違う可能性。mvn help:describe -Dplugin=... で正しいプラグイン名と goal を確認。

Q: シェルスクリプトで複数ターゲットを並べたい
A: set -e を入れて ant clean && ant compile && ant jar。または一つのターゲットに depends でまとめる。

編集
Post Share
子ページ

子ページはありません

同階層のページ

同階層のページはありません