Макет каталога для модулей Java 9

Я пытался написать модуль Java 9, но независимо от того, что я делаю, я получаю ошибку "пакет пуст или не существует". Я пробовал искать в Интернете ожидаемую структуру каталогов и пробовал все варианты макетов каталогов, о которых только мог подумать, но ничего не получалось.

Например, вот один макет, который я пробовал

bar.foo/module-info.java

module bar.foo {
    exports bar.foo;
}

bar.foo/bar/foo/wtf.java

package bar.foo;

public class wtf {
}

Тем не менее, компиляция по-прежнему дает ту же ошибку, как обычно.

> javac bar.foo/module-info.java 
bar.foo/module-info.java:2: error: package is empty or does not exist: bar.foo
    exports bar.foo;
               ^
1 error

2 ответа

Решение

Команда, которая должна работать:

javac bar.foo/module-info.java bar.foo/bar/foo/wtf.java

Причина в том, что вы пытаетесь скомпилировать класс, для которого требуется пакет, т.е. bar.foo в твоем случае. Но так как вы не создали его, компилятор выдает указанную ошибку.

Речь идет не о макете каталога, а о .class оценивается компилятором. Предоставление вашего другого класса (bar.foo/bar/foo/wtf.java) создает wtf.class в этом пакете и, следовательно, компилятор будет успешно компилировать module-info.class также.

Я столкнулся с той же проблемой при попытке добавить module-info.java в файл JAR, для которого у меня не было источника. Мне пришлось добавить пустой класс bar.foo.Bogus и скомпилировать с

javac bar.foo/module-info.java bar.foo/bar/foo/Bogus.java

Вы можете удалить фиктивный класс впоследствии.

Другие вопросы по тегам