Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java9模块的目录布局_Java_Java 9_Java Module_Module Info - Fatal编程技术网

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 {

我一直在尝试编写一个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 {
    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
之后可以删除伪类