有没有办法在Netbeans中找到包名不好的类?

时间:2011-04-05 12:16:18

标签: java netbeans compiler-errors package

经过多年的Java开发,我惊讶地发现编译器没有检查包名是否真的是与Java源文件路径对应的包名。

可以写这个:

package abcd; 
class Xyz {
}

并且它编译,即使Xyz.java位于efgh文件夹中。我在Netbeans中编辑文件时收到警告,但就是这样。事实上,这导致了一个很难发现的错误:http://netbeans.org/bugzilla/show_bug.cgi?id=197320

无论如何都可以获得警告或错误?

4 个答案:

答案 0 :(得分:2)

这不是错误;这是一个不便之处。您可以将每个.java文件放在一个目录中,每个类都在不同的包中,并且仍然可以正确编译并获得与类包相匹配的输出结构。

答案 1 :(得分:2)

使用gnu-find,您可以搜索整个项目。 cd到项目源根目录,然后:

find PROJECT -type f -name "*.java" -exec ./pmatchd.sh {} ";"

您需要pmatchd.sh - 脚本:

#!/bin/bash
#
dir=$(dirname $1)
d=${dir//\//.}
headline=$(head -n1 $1) 
p=${headline#package }
if [[ $d";" != $p ]]
then 
    echo "mismatch: " + $d " " + $p + " " + $1
fi

如果你喜欢它,你会将它移动到路径中的某个位置,而不是$ PWD。

答案 2 :(得分:1)

包名称只是命名空间。它可以转换为文件路径,大多数类加载器希望在

之类的位置找到已编译的类文件
<classpath-entry>/packagename.replace(".","/")/classname.class

(但这是类加载器业务)

答案 3 :(得分:0)

Eclipse不允许这样做,并将其显示为编译错误。如果Netbeans只是将其显示为警告,您可以将其更改为在编译设置中显示为错误。