2

何らかの理由で、プロジェクトでパッケージの長い名前を使用する必要があります。お気に入り:

com.example.foo.bar.bazz.anotherlongsubpart.andfinallytheactualpackagname

そのため、命名規則 (少なくとも Java の命名規則について知っていること) を考慮して、ドットをスラッシュに置き換える適切なディレクトリ構造を作成する必要があります。

com/example/foo/bar/bazz/anotherlongsubpart/andfinallytheactualpackagname

私にとってはあまりにも醜く見えます:)そこで、代わりにドットの部分だけをスラッシュに置き換えようとしました:

com.example.foo.bar.bazz.anotherlongsubpart/andfinallytheactualpackagname

言い換えれば、ここには長い名前「com.example.foo.bar.bazz.anotherlongsubpart」を持つパッケージ/ディレクトリが1つあり、「andfinallytheactualpackagname」を持つ別のパッケージ/ディレクトリがあります。それを行うことは合法ですか?Simple Build Tool を使用してこれらすべてのものをコンパイルし、単体テストを実行しようとしました。そして、それはうまく機能します。スラッシュを使ってより普通の方法で名前を付けるように。

したがって、私の実験が示すように、少なくとも SBT ではうまく機能します。しかし、そのような慣行がさらなる問題につながるかどうかはわかりませんか? たぶん、さまざまな種類のクラスローダーなどを備えたさまざまな環境にありますか?

4

3 に答える 3

8

Scala では、ディレクトリ名をソース ファイルで宣言されたパッケージにマップする必要はありません。コンパイラはこれを強制しません。

Javaでは、それはできません。ソース ファイルは、コンパイルするために正しいディレクトリ (ソース ファイルとして宣言されたパッケージ名によって決定される) にある必要があります。

したがって、Scala を使用している場合は好きなだけ実行できますが、Java ではできません。

于 2013-10-05T20:14:39.540 に答える
4

Scala はディレクトリの名前を気にしませんが、Java は気にします。Java コードがある場合は、その規則に従ってください。Scalaの場合、好きなようにします(ディレクトリにパッケージ名を使用しないことを含む)。

于 2013-10-05T20:14:52.120 に答える
3

そうすることはお勧めしません。Oracle パッケージ名のドキュメントで説明されているように、修飾されたクラス名とディレクトリの場所を変換する必要がある多くのツールは、単純に "." を置き換えます。ファイルセパレーターを使用すると、名前がそれを壊します。

于 2013-10-05T20:03:01.190 に答える