質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

9630閲覧

(クラスパスの設定)複数のフォルダに分かれている場合のコンパイル

feeling_jumper

総合スコア19

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/01/13 10:16

編集2019/01/14 07:03

GithubからJavaのプログラムをダウンロードし、
サンプルのアプリがどのように動いているのかをみたいのですが、
コンパイルの方法がわからず困っています。

ファイルの構成は下図の通りです。
!イメージ説明明](069f96c5f72ae7b95f10f20b683a0e1c.png)

このGame.javaにメインメソッドがあるので、
コンパイルすると、下図の通りに「パッケージが存在しません」「シンボルが見つかりません」
とのエラーが出ます。

コンパイルの時:
「User-no-iMac:core User$ javac -cp .:io Game.java」
Game.javaでimportしているソースは「io」フォルダ内にあるので、それを指定すればいいのかな?と思い、
このようなコマンドを打ちましたが、同じエラーがでます。

他にも環境変数をセットするコマンドについても、
どのフォルダをどうやってセットするのかがわかりません。

イメージ説明

おそらく、クラスパスの設定をしていないからだとは思うのですが、
どのようにコンパイルすべきか、調べてもよくわかりませんでした。

...Game.javaでimportしているクラスがどこにあるかを指定できていないから、
このようなエラーが出るという状況でしょうか。。

勉強不足の質問で大変申し訳ありませんが、
アドバイスいただけますと助かります。


20190114 追記
イメージ説明


Game.javaの中身
イメージ説明


libフォルダ内にあるjarファイル
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukkuri

2019/01/13 15:14

どういうコマンドで実行していますか? この場合、"実行パス"が重要です。
feeling_jumper

2019/01/14 00:39

ありがとうございます。説明不足があり申し訳ありません。 コマンドは、メインメソッドがあるディレクトリまでcdで移動し、 いろいろ試したのですが、どれも同じエラーメッセージが流れます。(パッケージがないシンボルが見つからないのエラー) 試したコマンドの一例: User-no-iMac:core User$ javac -cp .:io Game.java ↑Game.javaにimportしているソースがioフォルダにあるので、それを指定すれば通るのかなと思いましたがだめでした。 「javac -cp」でどのフォルダをどうやって指定するのかがわからない状態です。 他にも、環境変数をセットする場合でも、 どのフォルダをセットするのかがわからないです。 eclipseにインポートするとうまく起動しますし、 jarファイルバージョンをダウンロードし、それをダブルクリックすると、 そっちもうまくいくのですが、 ソースとしてjavaファイルをダウンロードすると、 それをコマンドでうまく実行することができないです。
guest

回答1

0

ベストアンサー

修正依頼でコメントを頂いたので原因がわかりました。

メインメソッドがあるディレクトリまで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です。

投稿2019/01/14 01:08

編集2019/01/14 08:50
yukkuri

総合スコア624

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

feeling_jumper

2019/01/14 02:04

詳しい説明、本当にありがとうございます。 ↑の説明をいただき、 最初にcdで移動する場所を、パッケージの一個上のsrcフォルダにし、 「javac minicraft/src/*.java」と打ちましたが、 User-no-iMac:src User$ javac minicraft/src/*.java javac: ファイルが見つかりません: minicraft/src/*.java 使用方法: javac <options> <source files> 使用可能なオプションのリストについては、-helpを使用します 上記エラーが出ました。
yukkuri

2019/01/14 03:09

すいません...まさかのパスを間違えていましたので、修正いたしました。
feeling_jumper

2019/01/14 03:46

いえいえ、ありがとうございます。 わかりづらいのがさらに、今回のソースは、 あのマイクラではなく「minicraft」(ミニクラフト)のソースなのですが、 それを修正しても、またエラーがでてしまいました。 エラーの画面については、質問内容の一番下に追記しましたが、 次は、他のパッケージが存在しませんとのエラーでした。 パッケージorg.jetbrains.annotations
feeling_jumper

2019/01/14 04:08

Game.javaのimport文で、残り読み込めてないものは、 このパッケージorg.jetbrains.annotationsだけのようですが、 フォルダを探してもどこにも見当たらないですね。。
feeling_jumper

2019/01/14 04:18

JetBrainsのチェッカーフレームワーク? でしょうか。。わからない単語がたくさん出てきて混乱しそうです。。
yukkuri

2019/01/14 06:53

すいません、まだスペルミスが残っていたみたいですね。修正しておきます。 あと、minicraft-dev3フォルダ内の、libというフォルダにjarファイルが入っていませんかね?
feeling_jumper

2019/01/14 07:03

入っています!質問欄の下にのせました!
yukkuri

2019/01/14 07:29

どうやら調べた結果残っているパッケージはIntelliJ IDEAというIDEのもののようです。 そのIDEで制作されたものの可能性がありますね。 最悪手作業でやる、もしくはIDEを使うかのどちらかになりそうです。
feeling_jumper

2019/01/14 08:15

ありがとうございます。 手作業でやる場合は、どのような作業になりますでしょうか? エラーが出た箇所を1つずつ修正していく形ですかね。 エラーが出た箇所を見ると、存在していないパッケージが3つほどあるようですが、 import org.jetbrains.annotations import com.mashape.unirest.http import org.json 上記パッケージが存在していないようです。 また見つからないシンボルは、ほとんど、 クラス:Nullable クラス:NotNull クラス:HttpResponse クラス:MultiplayerDisplay でしたので、ネットワークに関すること、マルチプレイに関する部分などが、 欠けているという状況ですかね。。
feeling_jumper

2019/01/14 08:22

私は今、Githubにあるソースを改良して、新しいプログラムを作ろうと考えていたのですが、 そもそも誰かが作ったソースをそのまますぐに起動できるとは思っていなかったのですが、 こういう場合は、IDEで開かないと、プロの方がやっても難しいということでしょうか? 勉強になると思い、コマンドで実行してみたのですが、難しそうですね。。
yukkuri

2019/01/14 08:40

すいません、私の返信が遅れていましたね。 NotNullとNullableは、多分ソースを探すと@NotNullや@Nullableがあると思います。なので、これとimportを消してください。その後、本題のcpを使います。そっちは回答を編集して説明します。。
feeling_jumper

2019/01/14 09:08

yukkuriさん、急がなくて大丈夫です!!! ゆっくりで大丈夫です!!> <
feeling_jumper

2019/01/14 13:20

ありがとうございます!! 今、@NotNullと@Nullableをすべて削除しました。 jarの展開がダブルクリックでできず、止まっています。 他のやり方で展開するにはどのようにするとよろしいでしょうか><
yukkuri

2019/01/15 06:23

jarが展開できない、ですか。 拡張子をzipにしてやってみてください。 なお、zipにして解凍できない場合、ソフトを使う必要があるようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問