4

我一直在尝试编写 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
4

2 回答 2

3

应该起作用的命令是:

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

于 2017-09-30T01:33:33.920 回答
2

module-info.java我在尝试将 a 添加到我没有源代码的 JAR 文件时遇到了同样的问题。我必须添加一个空类 bar.foo.Bogus 并编译

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

之后您可以删除虚假课程。

于 2018-05-06T22:10:35.157 回答