如何将几个罐子添加到模块路径?

Ale*_*dar 7 java maven java-platform-module-system java-9

我有以下情况:

模块地址:

module org.abondar.experimental.address {
    exports org.abondar.experimental.address;
}
Run Code Online (Sandbox Code Playgroud)

模块人:

module org.abondar.experimental.person {
    requires org.abondar.experimental.address;
    exports org.abondar.experimental.person;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Maven构建它们,所以每个模块都有自己的目标目录和jar文件.

我正在尝试运行具有这样的主类的模块Person

java --module-path Address/target/Address-1.0.jar;Person/target/Person-1.0.jar -m org.abondar.experimental.person/org.abondar.experimental.person.Main
Run Code Online (Sandbox Code Playgroud)

但我得到了许可否认.如何设置包含多个模块的模块路径?

Nam*_*man 4

好吧,在我的一个 MacOS 项目上尝试了这一点,我几乎得到了与此类似的结果 -

zsh: permission denied: .../.m2/repository/test/test/1.0.0-SNAPSHOT/test-1.0.0-SNAPSHOT.jar
zsh: permission denied: .../.m2/repository/org/slf4j/slf4j-log4j12/1.7.12/slf4j-log4j12-1.7.12.jar
zsh: permission denied: .../.m2/repository/org/slf4j/slf4j-api/1.7.12/slf4j-api-1.7.12.jar
Run Code Online (Sandbox Code Playgroud)

该错误的原因是 JAR 的路径被指定为要在 MacOS 上执行的命令

如果您将模块路径视为 MacOS(通常可能是 Unix)的目录列表,则它与java工具文档不匹配。相反,你可以寻找的是

java --help
Run Code Online (Sandbox Code Playgroud)

其中指出

--module-path <module path>... A 分隔的目录列表,每个目录都是一个模块目录。

在这种情况下,对你有用的命令是:-

java --module-path Address/target/Address-1.0.jar:Person/target/Person-1.0.jar -m org.abondar.experimental.person/org.abondar.experimental.person.Main
Run Code Online (Sandbox Code Playgroud)

  • 这 ; 用于分隔 OS X(和其他 Unix/Linux 系统)上的命令。所以我怀疑您使用 JAR 文件的路径作为命令,这可以解释“权限被拒绝”错误。 (3认同)
  • 我很想知道“权限被拒绝”来自哪里。这是一个脚本而不是java吗?在模块路径上,“java --help”的输出中没有足够的空间来显示所有详细信息。相反,请参阅 JEP 261,您将看到模块路径上的条目可以是模块或模块目录。 (2认同)