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

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

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

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

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Q&A

解決済

3回答

3725閲覧

コマンドでのコンパイル

nterka

総合スコア12

Java

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

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

0グッド

0クリップ

投稿2017/10/07 02:19

###前提・実現したいこと
eclipseではコンパイル可能で実行可能でしたが、自分でWindowsのコマンドプロンプトでコンパイルしようとするとエラーとなってしまいます。。

また、1ファイルの場合では自分でコマンドプロンプトでのコンパイルから実行まで可能できました。複数クラス(複数ファイル)になるとコンパイルエラーとなってしまいます。

###発生している問題・エラーメッセージ

エラーメッセージ
シンボルを見つけられません

###試したこと
なにか設定に不備があると思い各種サイトを見たのですが解決できず、「ここを確認したらよいかも」という点がありましたら、ぜひご教示いただけますと幸いです。どうぞよろしくお願い致します。

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

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

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

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

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

guest

回答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
KSwordOfHaste

総合スコア18394

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

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

nterka

2017/10/07 16:08

こちらありがとうございます。質問についてもその通りですね・・・。 エラー文言など、そのまま貼るようにしたいと思います。
guest

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
keicha_hrs

総合スコア6768

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

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

KSwordOfHaste

2017/10/07 05:29

> この-cpを抜かしてしまうと、Main.javaをコンパイルしたときにSubクラスが参照エラー 自分の回答例ではbinの下に何もない状態でMain.javaのみをコンパイルしてもTestクラスの参照エラーは起きませんでした。(経験的にですが)-dと同じ場所である場合は-cpは不要という認識でした。本来は付けるべきなのだろうか・・・
keicha_hrs

2017/10/07 05:32

ごめんなさい、私の回答の不備です。修正している間にコメントが付いてしまいました。-sourcepathの指定さえしていれば、コンパイルでは-cpの指定は不要だったようです(実際、実験的にプロジェクトを使って確認しました)。不備の回答にわざわざ目を通していただいて恐縮ですし、面目次第もございません。
KSwordOfHaste

2017/10/07 05:53 編集

知識を相互に補い合う場である点がteratailのよいところと思います。 自分も間違った回答して指摘をいただくことで学ばせていただいてます。「え!これ間違いだったのですか!?」とショックを受けることもままありますが、気づかないままいるよりはこのサイトで恥かいた方がいいやーと自分は思ってます。
nterka

2017/10/07 16:11

頂いた例をもとにして自分で改めて試して、理解/解決できました。 ありがとうございます。 ※それが解決したあとにもencodingやら何やらありましたが、オプションを付けて無事通ることができました。ありがとうございました
guest

0

おそらくですが、下記サイトの記載内容が参考になるのではないかと思います。

初心者のためのJava講座/WEBワークショップ 【第12回】クラスパスについて理解する
初心者のためのJava講座/WEBワークショップ 【第13回】パッケージについて理解する

Eclipse上であれば問題なく実行できるコードであるという前提のもとで考えられるエラーの原因としては、以下のようなものがあります。

  • Eclipseで使用しているJavaのバージョンと、コマンドプロンプトで実行しているjavacのバージョンが異なる。
  • コード内でnamespaceを定義しているが、それを考慮した場所でjavacが実行されていない。
  • クラスパスの設定が適切に行われていない。

投稿2017/10/07 04:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

KSwordOfHaste

2017/10/07 05:17

本来ならsuyamaさんぐらいの長さの回答が望ましいと思います。質問の仕方を考えてほしいということもあり自分は長すぎる回答をしてしまいました・・・
nterka

2017/10/07 16:05

ありがとうございます。Javaのバージョンを最新化しておきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問