Я не понимаю модификаторы пакетов (не аннотации):
public package foo;
public class Bar {
}
У них есть какой-то смысл?
Единственный тип модификатора пакета в JLS - это аннотация. Из JLS 7.4.1:
PackageDeclaration:
Идентификатор
package
{PackageModifier} {. Идентификатор};
PackageModifier:
аннотирование
Таким образом, public package foo;
является недопустимым синтаксисом.
Это компилируется в некоторых версиях Eclipse из-за ошибки, которая была исправлена в некоторых условиях и будет исправлена во всех условиях от Eclipse 4.4 и далее.