いちばん失敗した人決定戦

Mavenプロジェクトはtarget/classesを作成しその先にリソースファイルやクラスファイルを作るようです。
new URLClassLoader(new URL[] { new File("./").toURI().toURL() });
このようなコードでクラスローダーを作成すると、
target/classesをカレントディレクトリとするようです。
ところが、
Writer writer = new FileWriter(new File("./test.file"));
writer.write("aiueo");
writer.flush();
このようなコードでファイルを書き込むとtargetと並列な位置に作成するようです。
カレントディレクトリが異なる原因は何ですか?
ログファイル等実行時に作成されるファイルもtarget/classesに出力されるようにすべきですか?
あるいはtarget/classesはjarにまとめられるもので実行時生成物を置くべきではありませんか?
Mavenプロジェクトにおけるtargetの意味は何ですか?

A 回答 (2件)

>target/classesはjarにまとめられるもので実行時生成物を置くべきではありませんか?


実行時の生成物は置きません。クラスファイルや
画像や設定ファイル等の「リソース」を置きます。

>targetの意味は何ですか?

ビルドしたものの置場所。リソ―スも含みます。
    • good
    • 0

カレントディレクトリ? クラスローダーの getResource とかの動きの話ですか?


クラスローダーは親クラスローダーにリソースの探索を依頼しますが、
eclipse + maven の場合、検索場所として、System クラスローダが、クラスパスの中に target/classes を持っています。

もし、getResource の話なら、カレントディレクトリが検索されるのは最後。
クラスパス内の target/classes が先に検索されます。

ちなみに eclipse ではプロジェクトフォルダがカレントフォルダです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!