Scala/Java子目录,名称中带有点

Ily*_*hin 2 java scala classloader sbt

由于某些原因,我需要在我的项目中使用包的长名称.喜欢:

com.example.foo.bar.bazz.anotherlongsubpart.andfinallytheactualpackagname
Run Code Online (Sandbox Code Playgroud)

因此,考虑到名称约定(至少我所知道的Java中的名称约定),我必须创建适当的目录结构,用斜杠替换点:

com/example/foo/bar/bazz/anotherlongsubpart/andfinallytheactualpackagname
Run Code Online (Sandbox Code Playgroud)

至于我,它看起来太丑了:)所以我尝试用斜线替换只有点的部分:

com.example.foo.bar.bazz.anotherlongsubpart/andfinallytheactualpackagname
Run Code Online (Sandbox Code Playgroud)

换句话说,我在这里有一个包名为"com.example.foo.bar.bazz.anotherlongsubpart"的包/目录,另一个包含"andfinallytheactualpackagname".这样做是否合法?我尝试使用Simple Build Tool编译所有这些东西,并在其上运行我的单元测试.它运作良好.正如我用普通的方式用斜线命名.

因此,我的实验表明它至少与SBT一起运作良好.但我不确定这种做法是否会导致进一步的问题?也许在不同类型的类加载器等不同的环境中?

Mau*_*res 8

在Scala中,目录名称不必映射到源文件中声明的包,编译器不会以任何方式强制执行此操作.

在Java中,你不能这样做.源文件必须位于正确的目录(由声明为源文件的包名称),以便进行编译.

所以,如果你在Scala中,你可以在Java中尽可能多地使用它,不,你不能.