###前提・実現したいこと
eclipseではコンパイル可能で実行可能でしたが、自分でWindowsのコマンドプロンプトでコンパイルしようとするとエラーとなってしまいます。。
また、1ファイルの場合では自分でコマンドプロンプトでのコンパイルから実行まで可能できました。複数クラス(複数ファイル)になるとコンパイルエラーとなってしまいます。
###発生している問題・エラーメッセージ
エラーメッセージ
シンボルを見つけられません
###試したこと
なにか設定に不備があると思い各種サイトを見たのですが解決できず、「ここを確認したらよいかも」という点がありましたら、ぜひご教示いただけますと幸いです。どうぞよろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
単なる勘ですが、-sourcepath、-d、-cp(-classpass)オプションあたりのコマンドパラメーターの間違いという気がします。
質問文にこういうふうに書いてあれば原因かわかりやすいという例もかねて、一つのコンパイル&実行の例を挙げてみます。
- パッケージ(ソース)構成
package1.Main <-こちらにmainメソッドあり
package2.Test
(標準ライブラリー以外の外部ライブラリーは未使用)
- ディレクトリー構成
今いるディレクトリー +- src <- ソースファイル用 | +- package1 | | Main.java | +- package2 | Test.java +- bin <-クラスファイル出力用
なら、ソースファイルに誤りがない限り、以下でコンパイルと実行ができます。
bash
1$ javac -version 2javac 9 <== javaとバージョンが一致 3$ java -version 4java version "9" <== javacとバージョンが一致 5Java(TM) SE Runtime Environment (build 9+181) 6Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode) 7$ javac -sourcepath src -d bin src/package1/Main.java 8$ java -cp bin package1.Main
なにか設定に不備があると思い各種サイトを見たのですが解決できず
javacが動いたのでしょうから、単純にコマンドのパラメータの問題である気がします。プログラミングにおいてはまずマニュアル・リファレンス・仕様書の類をできるだけ読むのがよいです。javacのパラメータについては調べておられますか?それを調べれば「あ、これかな」と気づけることも結構あります。何が書いてあるかわからん!ということも確かに多いのですが、わからなければ質問するという手もあります。
「ここを確認したらよいかも」という点がありましたら
あなたがどういうパッケージ構成、ディレクトリー構成、コマンドオプションを指定したか、どんなエラーメッセージ(※)が出たのか明記せずに「どこが間違っていそうか」を尋ねるのは閲覧者からするとなぞなぞのような質問に見えるものです。上の方に書いた「どんな状態で何をしたか」をなるべく詳しく明確に書く必要があるということを認識しておくのが良いでしょう。
本件の場合「javacによる正しいコンパイルの仕方」がまだわからないのですから、ごく短い2~3のソースファイルを用いて試すこと、及び質問の際にはその短いソースの中身も含めて提示するのがベターだと思います。短いソースでやる方がいいのは「質問側・回答側双方にとって問題点を絞りやすくするため」です。
シンボルを見つけられません
経験を積んだ質問者さんの場合「必要充分な情報」が何かが判断でき、「冗長な情報は記載しない」とできると思います。しかし初心者の方の場合は大概、
src\package1\Main.java:7: エラー: シンボルを見つけられません System.out.println(new Test()); ^ シンボル: クラス Test 場所: クラス Main 1 package package1; 2 3 import package2.Test; 4 5 public class Main { 6 public static void main(String[] args) { 7 System.out.println(new Test()); <==この行でコンパイルエラー 8 } 9 }
などのようになるべく自分の解釈を排した明確な事実を記載した方がベターであることが多いです。エラーメッセージの中には「あなたには気づけない問題のポイント」が隠されているかも知れないのです。例えばシンボルが見つからないってのが標準ライブラリーのクラス名なのか自分で定義したクラス名なのかによって問題点の切り分け方が違ってきます。
投稿2017/10/07 05:08
編集2017/10/07 14:48総合スコア18394
0
ベストアンサー
例として、Eclipseでmyprojectというプロジェクトを作成し、com.example.mysampleというパッケージを作成して、その中にMain.javaとSub.javaという2つのJavaソースファイルを作ったとしましょう。mainメソッドはMain.javaの中にあって、その中でSub.javaのインスタンスを生成しているような構成になっているものとします。そうすると、myproject以下のディレクトリーツリーはこんな感じになっているはずです。
myproject ├ src │ └ com │ └ example │ └ mysample │ ├ Main.java │ └ Sub.java └ bin
Eclipseでは、ソースファイルはsrcの下に、コンパイルしたclassファイルはbinの下に配置するようになります。その結果通りにコマンドプロンプトでコンパイルしたい場合、まずmyprojectの直下に移動します。そこで、
C:\hoge\fuga\myproject>javac -sourcepath src -d bin src\com\example\mysample\Main.java
と実行すれば、2つのソースファイルがまとめてコンパイルされて通るはずです。
或いは、
C:\hoge\fuga\myproject>javac -d bin src\com\example\mysample\Sub.java C:\hoge\fuga\myproject>javac -d bin -cp bin src\com\example\mysample\Main.java
のようにソースファイルごとにコンパイルして、Main.javaのコンパイルのときには-cp(或いは-classpath)を付けて先にコンパイルしたSub.classを参照するようにしても通るでしょう。
コンパイルが完了すると、binの下にsrcと同じようなパッケージ名によるディレクトリー階層が出来て、その下にclassファイルが作られているでしょう。
これを実行したければ、
C:\hoge\fuga\myproject>java -cp bin com.example.mysample.Main
のように完全修飾クラス名で指定すれば実行できます。ここでも-cpオプションの指定は必要です。
途中で間違った回答をしたり、後から回答を追記したりしています。いろいろ右往左往して申し訳ありません。
投稿2017/10/07 05:19
編集2017/10/07 05:55総合スコア6768
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/07 05:32
2017/10/07 05:53 編集
2017/10/07 16:11
0
おそらくですが、下記サイトの記載内容が参考になるのではないかと思います。
初心者のためのJava講座/WEBワークショップ 【第12回】クラスパスについて理解する
初心者のためのJava講座/WEBワークショップ 【第13回】パッケージについて理解する
Eclipse上であれば問題なく実行できるコードであるという前提のもとで考えられるエラーの原因としては、以下のようなものがあります。
- Eclipseで使用しているJavaのバージョンと、コマンドプロンプトで実行しているjavacのバージョンが異なる。
- コード内でnamespaceを定義しているが、それを考慮した場所でjavacが実行されていない。
- クラスパスの設定が適切に行われていない。
投稿2017/10/07 04:38
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/07 05:17
2017/10/07 16:05
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/07 16:08