2011-10-28 21 views
1

jGRASPを使用しているうちに、パッケージ内のプログラムの出力が通常とわずかに異なっていることがわかりました。特に、プログラム名はクラスの先頭から相対パスになりました。Javaコンパイル、パッケージ、および相対パス

javac -g ch01\stacks\ArrayStack.java 

と同様に表示されて、実行出力:

は例えば、声明package ch01.stacks;を含んでJavaプログラムのために、コンパイルの出力は次のようになります。

Notepad ++やgeditなど、プログラムをコンパイルするためのスクリプトを設定できる他のプログラムでこの動作をシミュレートする方法が比較的簡単かどうかは疑問でした。

編集:お詫び申し上げますが、私が言っているコンパイルスクリプトは基本的にはjavacに渡されたプログラムファイル名であることを忘れています。むしろ絶対パスを使用するのではなく、スクリプトをjGRASPと同じように動作させたいと思っています。

私の現在のスクリプトで問題をさらに明確にするために、プログラムの現在のディレクトリでコンパイルされているので、パッケージ構造が私に問題を与えていると思います。私はパッケージ構造に関してJavaプログラムを比較的コンパイルする方法を探しています。ある

packageを探してプログラムを介して掘ることなく、コンパイル(前の例ではCH01)のために必要な最上位ディレクトリを検出する方法はありますか?

+0

これは*通常の動作です。シミュレーションしたいもの(とその理由)は何ですか? –

+0

ファイルシステムのディレクトリ構造は、常にjavaのパッケージ構造を反映します。これは正常です。 http://download.oracle.com/javase/1.4.2/docs/tooldocs/windows/javac.htmlを参照してください。 – mazaneicha

+0

@Dave Newton私のメモは、Notepad ++、geditなどのコンパイル・スクリプトでパッケージ構造を検出することです。 way jGRASPはむしろシームレスに機能します。 これを行うプログラムで 'package'を探す以外の方法はありますか? – mellowmaroon

答えて

0

私はあなたが何を望んでいるかまだ分かりませんが、これはコメントに収まりません。

jGRASPの動作はであり、正確にはの正常な動作です。 Javaクラスファイル(ソースクラスとコンパイル済みクラスの両方)は、パッケージ名を反映するファイル階層にあります。任意のJava IDEまたはコマンドラインビルドツール(AntMavenGradle、それは何でも)はこれを理解し、それに応じて動作します。

あなたが本当にそれらの車輪を再発明したいなら、あなたのコードは同じことをする必要があります。あなたのJavaソースが真正なパッケージ/ファイル階層に存在しない場合は、各ファイルのpackage宣言のソースを調べて、コンパイルされた.classファイルを適切なディレクトリに置く必要があります。

javac-dオプションは、出力ディレクトリを設定します。コンパイルされたクラスは、パッケージ名に基づいて正しい場所に配置されます。しかし、コンパイルするときには、自分のクラスであろうと、サードパーティのライブラリ(一般的にはjarファイル)であろうと、すべてのインポートがクラスパス上で利用可能でなければなりません。

要するに、あなたが尋ねていることをしないでください。私はそのような理由がないと考えることができます。 (これは、でないことを意味するものではありませんが、私は非常に懐疑的です。)Javaプロジェクトをビルドするには、比較的缶詰のmakeファイルを使用することも可能です。あなたが提案しているものより優れた解決策ですが、依然として恐ろしいアイデアです。

注:あなたが実行 Javaアプリケーション、クラスファイル瓶(またはWAR)ファイルにパッケージ、またはファイルシステム上か、期待階層内に存在しなければならないとき。

+0

それでは、まっすぐな道がないように見えます。私は援助に感謝します、私はちょうど私のスタンプコンパイルスクリプトをもう少し拡張可能にしようとしていました。 私はupvoteだろうが、私は十分な評判を持っていないようだ。 – mellowmaroon

+0

@ M.Cainあなたは[受け入れる]ことができますが(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)、私は質問に答えたとは確信していません。あなたがする必要があるのは、 'xargs'といくつかのファイル名操作で' find'です。私はあなたがそうしないと十分にお勧めできません。 –

+0

そうですね、私はパッケージを扱うプログラムのためにIDEに固執します。 さらにもう1つ、jGRASPはどのように相対パッケージ構造を出力しますか?それがスクリプトに含めるもっと簡単な方法があるように見えるようになったのです。 – mellowmaroon

関連する問題