Java 9模块的目录布局

时间:2017-09-30 00:04:14

标签: java java-9 java-module module-info

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

2 个答案:

答案 0 :(得分:2)

应该起作用的命令是:

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

答案 1 :(得分:1)

我在尝试将EDİT : 添加到我没有源代码的JAR文件时遇到了同样的问题。我必须添加一个空类bar.foo.Bogus并使用

$sid = $_SESSION['UserId'];
$stmt = $mysqli->prepare("SELECT u.id, u.username, s.user_id, s.name, p.user_id, p.pname FROM stores AS s INNER JOIN products AS p ON p.store_id = s.store_id INNER JOIN users AS u ON u.id = p.user_id WHERE s.user_id = ?");
$stmt->bind_param('i', $sid);
$stmt->execute();
$stmt->bind_result($id, $username, $user_id, $name, $user_id, $pname);
$stmt->fetch();
$stmt->close();
echo $pname;

echo"<br>" .$name;

echo "<br>".$username;

进行编译。之后您可以删除伪类。