在一个 Maven 项目中,我创建了一个简单的单元测试,它加载给定根包中的所有类,迭代它们并处理有关它们的包的一些信息(即是否为给定包提供了特定的注释)。
给定以下文件:
/src/main/com/andy/Foo.java
/src/main/com/andy/package-info.java
/src/main/com/andy/inner/Bar.java
src/test/com/andy/inner/SomeTest.java
src/test/com/andy/inner/package-info.java
当我加载Class<?>
forBar.java
并尝试获取其包的注释(使用该Class#getPackage
方法)时,令我惊讶的是,我发现包以某种方式共享了目录中的注释,该src/test
目录package-info.java
位于文件旁边SomeTest.java
(否则包就是相同的)。
我还发现它也可以反过来工作,即没有package-info.java
in的类src/test
似乎package-info.java
从目录下的同一个包中共享 a src/main
。
这是特定于 Maven 项目的,还是常规的 Java 行为?有没有办法不从其他目录加载相关包?