Макет каталога для модулей 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
Вы можете удалить фиктивный класс впоследствии.