- ベストアンサー
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のように一括でコンパイルするのが普通なのでしょうか?もし毎回全ファイルをコンパイルすると、修正のないものまでコンパイルしてしまうことになると思いますがそういうものなのでしょうか?質問がちょっと意味不明で恐縮ですが一人で小さなプログラムを作成したことしかないので、会社などで大規模なプログラムを作成している現場では普通どうやっているものか知りたくて質問しました。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 コンパイルについてですが、そもそも、関連するソースを一緒にコンパイルする必要はありません。ただ、関連するソースをコンパイルしてできたクラスファイルは必要です。 つまり、 (1)をコンパイルする場合は(2)のクラスファイル(???.class)が必要です。(2)のクラスファイルをjavacコマンドのオプションのclasspathで設定してやると(1)単体でコンパイルできます。 また、(2)のファイルを編集した場合は、(1)と(3)のファイルもコンパイルし直した方が無難でしょう。 Eclipseなどは、それらの依存関係によって再コンパイルするファイルを決定していると思われます。 業務では、、、開発者のレベルではEclipseなどのIDEにコンパイルはまかせてしまってます。結合テストやそれ以降のテスト段階、本番環境への完成物のリリースをする際は、既出のantやmavenなどのビルドツールを使っています。Eclipseが不要になり、コマンドラインで利用できますから。
その他の回答 (2)
- reiman
- ベストアンサー率62% (102/163)
makeではなくantを使います。 antはEclipseと連動させることもできますが、 もともち独自の実行するように作られています。 antは単独のJavaファイルもコンパイルできますが 複数のJavaファイルをコンパイルするのが普通です。 また複数のJarファイル等をクラスパスに含めます。 Eclipseなどのideを使わないならばantを使うべきです。
お礼
antの存在を初めて知りました。使ってみます。有り難うございました。
- KDASH-XP
- ベストアンサー率45% (62/135)
最近はEclipseやWeblogicWorkshop、WebSphere StudioなどのIDE環境についているビルドツール(大抵はant?)でビルドすることが大半なので、結果としては一括してビルドしていることになります。 それ以前にIDEで開発中の場合、コードを書くごとにコンパイラが走るので常に差分コンパイルが生じているようなイメージです。
お礼
わかりました。ありがとうございました。
お礼
なるほど一緒にコンパイルしているわけではなかったんですね。。勘違いしていました。あるクラス内で他のクラスを参照するようなソースコードをコンパイルする場合は、事前に参照先のコンパイル済クラスファイルがあることが前提、それを見えるようにするのがクラスパスだというところでしょうか。理解が深まりました。有り難うございました。