今回はMacOSさんがとっても優秀過ぎて勝手に沼にハマった私の備忘録です。
##環境
macOS Catallina
##なにがあったか
私が久しぶりにJavaのソースコードを書いていてターミナルからコンパイルしたくなった時のことです。
javac -cp "classpathをいろいろ" -d 出力先ディレクトリ ./package名/Example.java
と普通に打ちます。
classファイルが生成されます。
ここまでは順調でした。
$ cd 出力先ディレクトリ
$ java package名/Example
エラー: メイン・クラスExampleが見つからなかったかロードできませんでした
orz
やらかしました。
いろいろ調べた結果、最終的には事なきを得たのでよくあるパターンと共に記事にしてみました。
(後の伏線になるのですが、今回私はDesktopディレクトリ以下で作業していました。)
同じことやらかした人に届けこの想い…。
Pattern1 ディレクトリ構成が違う
今回調子に乗ってsrcディレクトリとbinディレクトリに分けていて、
さらにパッケージも分けていましたので、まずディレクトリ構成からです。
これを最初にやっておくとエラー様の言う通り(場所の勘違いなどから)本当にclassファイルがない場合もここで発覚します。
Desktop/
└─project/
├src/package名/
│ └─Example.java
└bin/package名/
└─Example.class
問題なかったです。
Pattern2 mainメソッドが無い
java
で実行するclassにはmainメソッドが必須です。
たまに書いてなくておなじみのエラーを出している人を見ます。
Pattern3 環境変数CLASSPATH
私は使ったことなかったので意識したことなかったですが、これを下手に設定して失敗するパターンもあるようです。
$ echo $CLASSPATH
$
まぁ使ったこと無いので当然ですけど大丈夫でした。
ここまで来るとなにがいけないのか。。。
Pattern4 macOSさんかしこい
いろいろ試して疲れた頃、(そもそもこんなに発覚しないことある…?)o.(;´Д`)とか思いだしました。
そこで、まさかと考えて「システム環境設定」→「セキュリティとプライバシー」を見ると
今回Desktopでプログラミングしていた私は まんまと Catalinaさんのセキュリティに止められていたのです。
これにて一件落着。解決です。
##まとめ
皆さんはこんなしょうもない設定してないと思うのですが、ネットで
"エラー: メイン・クラス○○が見つからなかったかロードできませんでした"
について調べても解決できず、(エラーメッセージも権限の問題らしきものなのに)それがわかりにくかったので、後に現れるかもしれない私と同じミスをする人のために書いてみました。