LoginSignup
0
0

More than 3 years have passed since last update.

Javacコマンドについて

Last updated at Posted at 2019-05-04

Javaのコンパイラコマンドであるjavacコマンドについて

普段何気なく使っているこのコマンド。時々、ファイルエンコーディングのところとか、パッケージを指定したりする場合に単純にコンパイルできない時とかあるので、備忘としてまとめる。

実行環境について

これから記載していく内容は以下の環境で実行する。
OS:macOS Mojave(バージョン 10.14.4)
javacコマンド:バージョン 1.8.0_151

javacコマンドの使い方 実行例1

まずは、素直な使い方についてで、以下のようなJavaで書いたサンプルソースをコンパイルする場合について。

Sample.java
public class Sample {
    public static void main(String[] args) {
        System.out.println("Hello, world!!");
    }
}

以下の通り、javacコマンドの引数に上記ファイルを指定して実行するだけ。特にエラーがなく正常にコンパイルができたら、プロンプトが表示される。

実行例1
$ javac Sample.java

因みに、Javaの文法が間違っていたりすると、以下のようなエラーになる(main関数の戻り値のvoid綴り間違えの場合)。
意外とメッセージが親切で、ちゃんと読めばだいたい何でエラーになっているかわかると思う。

実行例1(コンパイルエラー)
$ javac Sample.java
Sample.java:2: エラー: シンボルを見つけられません
    public static viod main(String[] args) {
                  ^
  シンボル:   クラス viod
  場所: クラス Sample
エラー1個

javacコマンドの使い方 実行例2

次はJavaのコードを書いているソースファイルの文字エンコードと、クライアントの環境のシステムの文字エンコードが異なる場合について。例えば、Windowsだと、基本的にSJISなので、例えば日本語でこんにちはとかをソースに記載したファイルをUTF-8で保存してコンパイルするとエラーになってしまう。

エラーの例を示すために事前確認。まずは環境のデフォルト?ファイルエンコーディングを取得する。以下のソースを作成して、コンパイル後に実行する。実行すると、ファイルエンコーディングが標準出力に出力される。今回はUTF-8と出力されました。

EncodingCheck.java
public class EncodingCheck {
    public static void main(String[] args) {
        System.out.println(System.getProperty("file.encoding"));
    }
}

次に、以下の内容を記載したソースファイルを文字エンコーディングSJISで保存してコンパイルしてみる。これは上記で事前に調べたファイルエンコーディングとは別のものにするためにSJISとしている。

Sample2.java
public class Sample2 {
    public static void main(String[] args) {
        System.out.println("こんにちは");
    }
}

実行結果としては、以下の通り。コンパイルエラーとなった。エラー内容をみると、UTF8では正常に表示できない文字コードが使われていたのでエラーとのこと。この場合は、javacコマンドのオプションで文字エンコーディングを指定してやれば良い(今回の場合だと、もちろんファイルをUTF8で保存し直すのでも正常にコンパイルできる)。
(これ、なんで7個もエラーが表示されるのかはわからない。気が向いた時にでも調べたい)

実行例2(コンパイルエラー)
$ javac Sample2.java
Sample2.java:3: エラー: この文字は、エンコーディングUTF8にマップできません
        System.out.println("����ɂ���");
                            ^
Sample2.java:3: エラー: この文字は、エンコーディングUTF8にマップできません
        System.out.println("����ɂ���");
                             ^
Sample2.java:3: エラー: この文字は、エンコーディングUTF8にマップできません
        System.out.println("����ɂ���");
                              ^
Sample2.java:3: エラー: この文字は、エンコーディングUTF8にマップできません
        System.out.println("����ɂ���");
                               ^
Sample2.java:3: エラー: この文字は、エンコーディングUTF8にマップできません
        System.out.println("����ɂ���");
                                 ^
Sample2.java:3: エラー: この文字は、エンコーディングUTF8にマップできません
        System.out.println("����ɂ���");
                                  ^
Sample2.java:3: エラー: この文字は、エンコーディングUTF8にマップできません
        System.out.println("����ɂ���");
                                   ^
エラー7個

以下の通り、encodingオプションの引数に、ファイル文字エンコーディングであるSJISを指定して実行してあげればコンパイルエラーにならない(因みに、encodingオプションはファイル名の後ろに記載してても問題ない)。

実行例2
$ javac -encoding sjis Sample2.java

あとがき

まだまだ他にも確認しておきたいことあるが、これ以上記載しても盛りだくさんになりすぎるので一旦終わり。あとで、クラスパスとかソースパスとかも確認しておきたいと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0