• ベストアンサー

Javaのコンパイルについて

どうでもいいことかも知れませんが少し気になったので質問します。以下のようなプログラムを作成しました。 (1) Client.java main()有り、main内でServerのインスタンス作成 (2) Server.java main()無し、インターフェイスの定義のみ (3) ServerImpl.java main()有り、main内で自分自身(ServerImpl)のインスタンス作成 いつもはフォルダ内でjavac *.javaとコンパイルしてきたのですが、たまたま今日は一つずつコンパイルしてみました。一ファイルずつコンパイル出来るものかと思っていたのですがそうではなく、 (2)は単独でコンパイル出来る。 (1)と(3)は単独でコンパイル出来ない。((1)は(2)と同時にコンパイルする必要がある。(3)は(2)と同時にコンパイルする必要がある。) であることを初めて知りました。つまり関連するクラスは一緒にコンパイルしなければならないということだと思うのですが、普通は関連するjavaファイルだけのMakefileをそれぞれ作るのでしょうか?それも大変だと思うのですが。。それともjavac *.javaのように一括でコンパイルするのが普通なのでしょうか?もし毎回全ファイルをコンパイルすると、修正のないものまでコンパイルしてしまうことになると思いますがそういうものなのでしょうか?質問がちょっと意味不明で恐縮ですが一人で小さなプログラムを作成したことしかないので、会社などで大規模なプログラムを作成している現場では普通どうやっているものか知りたくて質問しました。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんにちは。 コンパイルについてですが、そもそも、関連するソースを一緒にコンパイルする必要はありません。ただ、関連するソースをコンパイルしてできたクラスファイルは必要です。 つまり、 (1)をコンパイルする場合は(2)のクラスファイル(???.class)が必要です。(2)のクラスファイルをjavacコマンドのオプションのclasspathで設定してやると(1)単体でコンパイルできます。 また、(2)のファイルを編集した場合は、(1)と(3)のファイルもコンパイルし直した方が無難でしょう。 Eclipseなどは、それらの依存関係によって再コンパイルするファイルを決定していると思われます。 業務では、、、開発者のレベルではEclipseなどのIDEにコンパイルはまかせてしまってます。結合テストやそれ以降のテスト段階、本番環境への完成物のリリースをする際は、既出のantやmavenなどのビルドツールを使っています。Eclipseが不要になり、コマンドラインで利用できますから。

参考URL:
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/tooldocs/solaris/javac.html
rio_grande
質問者

お礼

なるほど一緒にコンパイルしているわけではなかったんですね。。勘違いしていました。あるクラス内で他のクラスを参照するようなソースコードをコンパイルする場合は、事前に参照先のコンパイル済クラスファイルがあることが前提、それを見えるようにするのがクラスパスだというところでしょうか。理解が深まりました。有り難うございました。

その他の回答 (2)

  • reiman
  • ベストアンサー率62% (102/163)
回答No.2

makeではなくantを使います。 antはEclipseと連動させることもできますが、 もともち独自の実行するように作られています。 antは単独のJavaファイルもコンパイルできますが 複数のJavaファイルをコンパイルするのが普通です。 また複数のJarファイル等をクラスパスに含めます。 Eclipseなどのideを使わないならばantを使うべきです。

rio_grande
質問者

お礼

antの存在を初めて知りました。使ってみます。有り難うございました。

  • KDASH-XP
  • ベストアンサー率45% (62/135)
回答No.1

最近はEclipseやWeblogicWorkshop、WebSphere StudioなどのIDE環境についているビルドツール(大抵はant?)でビルドすることが大半なので、結果としては一括してビルドしていることになります。 それ以前にIDEで開発中の場合、コードを書くごとにコンパイラが走るので常に差分コンパイルが生じているようなイメージです。

rio_grande
質問者

お礼

わかりました。ありがとうございました。

関連するQ&A

専門家に質問してみよう