Java9模块的目录布局
我一直在尝试编写一个Java9模块,但无论我做什么,我都会得到错误“包为空或不存在”。我曾尝试在网上搜索预期的目录布局,并尝试了我能想到的所有目录布局的变化,但没有任何效果 例如,这里有一个我尝试过的布局Java9模块的目录布局,java,java-9,java-module,module-info,Java,Java 9,Java Module,Module Info,我一直在尝试编写一个Java9模块,但无论我做什么,我都会得到错误“包为空或不存在”。我曾尝试在网上搜索预期的目录布局,并尝试了我能想到的所有目录布局的变化,但没有任何效果 例如,这里有一个我尝试过的布局 bar.foo/module info.java module bar.foo { exports bar.foo; } package bar.foo; public class wtf { } bar.foo/bar/foo/wtf.java module bar.foo {
bar.foo/module info.java
module bar.foo {
exports bar.foo;
}
package bar.foo;
public class wtf {
}
bar.foo/bar/foo/wtf.java
module bar.foo {
exports bar.foo;
}
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
。我在尝试将module info.java
添加到没有源代码的JAR文件时遇到了同样的问题。我不得不添加一个空类bar.foo.Bogus并用
javac bar.foo/module-info.java bar.foo/bar/foo/Bogus.java
之后可以删除伪类