Java 9 个模块的目录布局
directory layout for Java 9 modules
我一直在尝试编写 Java 9 模块,但无论我做什么,我都会收到错误 "package is empty or does not exist"。我已经尝试在线搜索预期的目录布局,并尝试了我能想到的目录布局的所有变体,但没有任何效果。
例如,这是我尝试过的一种布局
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
原因是,您正在尝试编译一个 class,它需要一个包存在,即在您的情况下 bar.foo
。但是由于您还没有创建,编译器会抛出上述错误。
这与目录布局无关,而是编译器评估的.class
。提供您的其他 class(bar.foo/bar/foo/wtf.java
) 在该包中创建 wtf.class
,因此编译器也会成功编译 module-info.class
。
我 运行 在尝试将 module-info.java
添加到我没有源代码的 JAR 文件时遇到了同样的问题。我不得不添加一个空的 class bar.foo.Bogus 并用
编译
javac bar.foo/module-info.java bar.foo/bar/foo/Bogus.java
之后您可以删除伪造的 class。
我一直在尝试编写 Java 9 模块,但无论我做什么,我都会收到错误 "package is empty or does not exist"。我已经尝试在线搜索预期的目录布局,并尝试了我能想到的目录布局的所有变体,但没有任何效果。
例如,这是我尝试过的一种布局
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
原因是,您正在尝试编译一个 class,它需要一个包存在,即在您的情况下 bar.foo
。但是由于您还没有创建,编译器会抛出上述错误。
这与目录布局无关,而是编译器评估的.class
。提供您的其他 class(bar.foo/bar/foo/wtf.java
) 在该包中创建 wtf.class
,因此编译器也会成功编译 module-info.class
。
我 运行 在尝试将 module-info.java
添加到我没有源代码的 JAR 文件时遇到了同样的问题。我不得不添加一个空的 class bar.foo.Bogus 并用
javac bar.foo/module-info.java bar.foo/bar/foo/Bogus.java
之后您可以删除伪造的 class。