自動化無しに生活無し

WEBとかAIとかLinux関係をひたすら書く備忘録系ブログ

Javaのpackage(パッケージ)の実行方法

thumbnail

Javaのパッケージの実行方法でちょっと詰まったので、覚書としてまとめておく。

【例】ソースコードとディレクトリ構成

ディレクトリ構成は以下の通り、このとき、myprojectのディレクトリ名は任意とする。

myproject
├── vehicle
│   └── Car.java
└── main
    └── CarExec.java

Car.javaの内容はこちら

// vehicle/Car.java
package vehicle;

public class Car {
    private String model;

    public Car(String model) {
        this.model = model;
    }

    public void start() {
        System.out.println(model + " is starting.");
    }

    public void drive() {
        System.out.println(model + " is driving.");
    }
}

CarExec.javaの内容はこちら

// main/CarExec.java
package main;

import vehicle.Car;

public class CarExec {
    public static void main(String[] args) {
        // vehicle パッケージ内の Car クラスを使用
        Car myCar = new Car("Toyota");
        myCar.start();
        myCar.drive();
    }
}

実行方法

javacコマンドで全てのjavaファイルをコンパイルする。

myprojectディレクトリにて、javacコマンドを実行する

javac ./*/*.java

.classファイルが作られる。

javaコマンドで実行する

myprojectディレクトリにて、

java main.CarExec

を実行する。

このとき、mainディレクトリ内で

java CarExec

と実行しても動かない。このエラーが出る。

エラー: メイン・クラスCarExecを検出およびロードできませんでした
原因: java.lang.NoClassDefFoundError: main/CarExec (wrong name: CarExec)

Javaのパッケージ実行時に注意すること

以上から次のことが言える。

  • package に書いてあるパッケージ(ディレクトリ)に含まれているか?
  • 影響する全てのjavaファイルはコンパイルされているか?
  • 実行時は java パッケージ.ファイル名

結論

以上から、javaのパッケージ実行時には注意を要する。

packageで指定しているパッケージ名に誤りはないか、コンパイルはされているか、実行するコマンドに間違いはないか。

スポンサーリンク

シェアボタン

Twitter LINEで送る Facebook はてなブログ