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

最佳答案

相反,应该起作用的命令是:

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

09-06 02:59