- PR -

[Eclipse] パッケージ宣言と異なるディレクトリへのソース配置

1
投稿者投稿内容
SUK2
ベテラン
会議室デビュー日: 2005/12/27
投稿数: 69
投稿日時: 2008-05-07 13:58
お世話になっております。
Eclipseの設定に関してご質問させて頂きます。

現在の業務で既存ソースの修正を行っているのですが、ソース内のパッケージ宣言と
ソースファイルの配置ディレクトリが異なっています。

その為、Eclipseを使用して修正を行おうとすると「予想されるパッケージに一致しない」
旨のエラーが大量に出力されてしまいます。

既存のソースがどの様な環境で作成された物なのかは不明なのですが、今回の修正は
Eclipse上で行いたい為、なんとかエラーを出さない様にしたいと考えています。
#パッケージ宣言と一致するディレクトリに移動すれば良いのですが、極力ソースの
#配置を変更したく無いのです。

一通り設定を除いては見たのですが、「ソースのディレクトリ構成をパッケージと一致
させない」様な設定項目は見つかりませんでした。

Eclipse上では、ソースのパッケージ宣言と配置ディレクトリは絶対に一致させなくては
ならないのでしょうか?

どなたかご存知の方がいらっしゃいましたら教えて頂きたく、宜しくお願い致します。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-05-07 15:04
Javaでは原則としてパッケージ名と同じ名前のフォルダ構成を用いる必要があります。
フォルダ構成にパッケージ名を合わせるか、
パッケージ構成にフォルダ名を合わせてください。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2008-05-07 15:38
>ソース内のパッケージ宣言と
>ソースファイルの配置ディレクトリが異なっています。
具体的にどのように異なってるんですか?

hoge.moge.FooClass.java→hoge/moge/FooClass.java

が通常だとして。単に

src/hoge/moge/FooClass.java

のように、上にくっついてるだけ?
であれば、プロジェクトのプロパティの、「Javaのビルド・パス」のソースタブで、ソースフォルダーを規定してあげればいいだけなんですが。
SUK2
ベテラン
会議室デビュー日: 2005/12/27
投稿数: 69
投稿日時: 2008-05-07 23:55
ご返答ありがとうございます。

>nagise様
引用:
Javaでは原則としてパッケージ名と同じ名前のフォルダ構成を用いる必要があります。

classファイルの配置ディレクトリはパッケージ名と同じ名前のディレクトリ構成を用いる必要がありますが、ソースファイルの配置ディレクトリはパッケージ名と一致していなくてもコンパイル可能だったかと思います。思い違いでしょうか?

>mio様
それが、なぜか
hoge.moge.FooClass.java→hoge/moge/FooClass/FooClass.java
の様になっているんですよね・・・。
開発は下請けに出していた様で、クライアントも開発時の環境を把握していない為
困っている次第です。


やはりパッケージに合わせてソースの配置ディレクトリを変更してから修正するしか
無いですかね・・・。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-05-08 11:46
引用:

SUK2さんの書き込み (2008-05-07 23:55) より:
>nagise様
引用:
Javaでは原則としてパッケージ名と同じ名前のフォルダ構成を用いる必要があります。

classファイルの配置ディレクトリはパッケージ名と同じ名前のディレクトリ構成を用いる必要がありますが、ソースファイルの配置ディレクトリはパッケージ名と一致していなくてもコンパイル可能だったかと思います。思い違いでしょうか?



原則として同一である必要があります。
Sun純正のjavacコマンド、つまるところコンパイラの説明を見てください。
http://java.sun.com/javase/ja/6/docs/ja/technotes/tools/windows/javac.html
引用:

ソースファイルは、パッケージツリーを反映したディレクトリツリーに配置する必要があります。たとえば、すべてのソースファイルを C:\workspace に置いている場合、com.mysoft.mypack.MyClass のソースコードは C:\workspace\com\mysoft\mypack\MyClass.java にある必要があります。



少なくとも、Sunのjavacではパッケージ単位でフォルダとマッピングさせる機能性はありません。
ただ、そういう機能性を備えたjavaコンパイラを作ることは原理的に可能です。
たとえばJSPのコンパイラではフォルダ構成とパッケージ構成が合っていなかったりします。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-05-08 11:53
そうだ。プログラムからjavac呼んでやる方法だとどうだろう。
http://java.sun.com/javase/ja/6/docs/ja/api/javax/tools/JavaCompiler.html

JavaFileObjectを自前で読みだして渡してやればできるのかもしれません。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2008-05-08 19:40
単に、納品用のディレクトリ構成なんてことはないですかね。
以前同じような感じで、ディレクトリを変えて納品した案件があったような…。

shやantで、ファイルを規定のディレクトリへコピーした後コンパイルするようになってたのかも?
今の構成がそのままコンパイルに使われていたという前提から、違うのかもしれません。
SUK2
ベテラン
会議室デビュー日: 2005/12/27
投稿数: 69
投稿日時: 2008-05-08 22:43
>nagise様
引用:
原則として同一である必要があります。
Sun純正のjavacコマンド、つまるところコンパイラの説明を見てください。

おぉ・・・。本当ですね。教えて頂きありがとうございます。
引用:
そうだ。プログラムからjavac呼んでやる方法だとどうだろう。

IDE上でリファクタリングを行いたかったんですよね。なのでリアルタイムにコンパイルしたかったのです。

>mio様
引用:
shやantで、ファイルを規定のディレクトリへコピーした後コンパイルするようになってたのかも?

どうやらその様です。(なぜか)batからantを呼んでコンパイルしていた形跡がありました。


本日クライアントに確認を取り、納品時に元の配置に戻すことを条件に、修正時に一時的にソースの配置を変更する許可を取りました。ソースの配置を変更する事で対応したいと思います。

皆様ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)