Есть ли способ найти классы с плохим именем пакета в Netbeans? - PullRequest
3 голосов
/ 05 апреля 2011

После многих лет развития Java я был шокирован, узнав, что компилятор не проверяет, действительно ли имя пакета соответствует пути исходного файла Java.

Вы можете написать это:

package abcd; 
class Xyz {
}

и он будет скомпилирован, даже если Xyz.java находится в папке efgh.Я получаю предупреждение при редактировании файла в Netbeans, но это все.Фактически, это привело к ошибке, которую было очень трудно обнаружить: http://netbeans.org/bugzilla/show_bug.cgi?id=197320

Есть ли способ получить предупреждения или ошибки в любом случае?

Ответы [ 4 ]

2 голосов
/ 05 апреля 2011

С помощью gnu-find вы можете искать весь проект.перейдите в корневой каталог проекта, а затем:

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 голосов
/ 05 апреля 2011

Это не ошибка;это неудобство.Вы можете поместить каждый файл .java в один каталог, в котором каждый класс находится в отдельном пакете, и при этом все равно правильно скомпилировать и получить структуру вывода, соответствующую пакетам классов.

1 голос
/ 05 апреля 2011

Имя пакета - это не что иное, как пространство имен. Его можно преобразовать в путь к файлу, и большинство загрузчиков классов ожидают найти скомпилированный файл класса в таком месте, как

<classpath-entry>/packagename.replace(".","/")/classname.class

(но это бизнес загрузчик классов)

0 голосов
/ 05 апреля 2011

Eclipse не допустит этого и покажет это как ошибку компиляции. Если NetBeans просто показывает это как предупреждение, вы можете изменить его, чтобы оно отображалось как ошибка в настройках компиляции.

...