質問: GithubからJavaのプログラムをダウンロードし、 サンプルのアプリがどのように動いているのかをみたいのですが、 コンパイルの方法がわからず困っています。 ファイルの構成は下図の通りです。 !![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/54c20b548bd1f7b18657f5479ed93eda.png)明](069f96c5f72ae7b95f10f20b683a0e1c.png) このGame.javaにメインメソッドがあるので、 コンパイルすると、下図の通りに「パッケージが存在しません」「シンボルが見つかりません」 とのエラーが出ます。 コンパイルの時: 「User-no-iMac:core User$ javac -cp .:io Game.java」 Game.javaでimportしているソースは「io」フォルダ内にあるので、それを指定すればいいのかな?と思い、 このようなコマンドを打ちましたが、同じエラーがでます。 他にも環境変数をセットするコマンドについても、 どのフォルダをどうやってセットするのかがわかりません。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/cf2337e63e371a6ac38ec60032e3b15b.png) おそらく、クラスパスの設定をしていないからだとは思うのですが、 どのようにコンパイルすべきか、調べてもよくわかりませんでした。 ...Game.javaでimportしているクラスがどこにあるかを指定できていないから、 このようなエラーが出るという状況でしょうか。。 勉強不足の質問で大変申し訳ありませんが、 アドバイスいただけますと助かります。 --- 20190114 追記 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/b6011974c124ebe6dad059d010c57958.png) --- Game.javaの中身 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/507b5110ccdf97a1c55bdf1ee3bb7bac.png) --- libフォルダ内にあるjarファイル ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/8ffdece9b0de90bb9f20b1451e58673f.png)
回答: 修正依頼でコメントを頂いたので原因がわかりました。 > > メインメソッドがあるディレクトリまでcdで移動し > > > まずこれが違いますね。また、 > > 「javac -cp」でどのフォルダをどうやって指定するのかがわからない状態です。 > > > というのも違います。 cpはclasspathの略で、基本jarファイルを指定するときに使います。(ライブラリなどですね) > > 他にも、環境変数をセットする場合でも、 > > どのフォルダをセットするのかがわからないです。 > > > 実行パスのことなのかな?まあ普段は必要ないのと設定がめんどくさいのでなくても問題ないと思われます。 > > eclipseにインポートするとうまく起動しますし、 > > jarファイルバージョンをダウンロードし、それをダブルクリックすると、 > > そっちもうまくいくのですが、 > > > 多分これはMainクラスの設定と実行パスをうまく判定してくれているからですね。 > > この場合、"実行パス"が重要です。 > > > とかきました。なぜなら、**Mainクラスのフォルダではなく、パッケージの先頭のフォルダの親階層でなくてはいけないからです。** ソースに、 ``` package minicraft.core; ``` みたいなのが書かれていたと思います。これがパッケージです。 なので、その一個上、srcフォルダで実行すればいいことになります。cpは必要ないです。 ただ、そしたらどうやって実行するのか、という話になります。これはパッケージ名をクラスの前につければOKです。 ``` java minicraft.core.Main # 実行の場合(#の後はコメントです) ``` コンパイルならファイルで指定します。macでできるかは微妙ですが、 ``` cd src # 細かいパスは個人でお願いします javac minicraft/core/*.java minicraft/core/io/*.java # * はワイルドカード 複数並べると指定したフォルダ内の全javaファイルがコンパイルできる ``` こっちはフォルダなことに注意してください。 ### クラスパスについて -cpを使い、 ``` javac -cp lib/AA.jar:lib/BB.jar コンパイルクラス ``` というふうにして、jarには以下を指定します。 ・json-20160212.jar ・unirest-java-1.4.9.jar あと、どれか一つなんですが名前が... ・httpcore-4.4.4.jar かな? 展開したりツールで見るとそのパッケージがあるか確認できます。 パス区切り文字は多分 : です。 もしくは展開しましょう。こっちのほうが楽かな? libの中のjarを全てsrcの中にコピーします。 その後、コピーしたjarを展開します。(展開は多分右クリックすればできます) META-INFとか言うファイルの上書きについて聞かれたら上書きしちゃってOKです。