如何将多个jar文件添加到模块路径?

8

我遇到了以下情况:

模块地址:

module org.abondar.experimental.address {
    exports org.abondar.experimental.address;
}

人员模块:

module org.abondar.experimental.person {
    requires org.abondar.experimental.address;
    exports org.abondar.experimental.person;
}

我正在使用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

但我遇到了权限被拒绝的问题。我该如何设置模块路径,包括几个模块?


2
请展示您所遇到的完整错误信息(或者如果您遇到异常,则展示完整的堆栈跟踪)。 - VGR
1
此外,看到您的 pom.xml 文件会很好。 - Kirill Simonov
1个回答

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
那个错误的原因是JAR文件的路径被指定为在MacOS上执行的命令。如果你将模块路径视为适用于MacOS(可能是Unix通用)的目录列表,它与java工具文档不匹配。相反,你可以寻找的是:
java --help

这里是关于模块路径的说明:

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

如果您需要使用该命令,则应执行以下操作:

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

2
我很想知道“权限被拒绝”是从哪里来的。这是脚本而不是Java吗? 如果在模块路径上,那么java --help的输出空间不足以显示所有细节。请参阅JEP 261,您将看到模块路径上的条目可以是模块或模块目录。 - Alan Bateman
@AlanBateman 首先,对我来说似乎像 --help 输出并没有完全包含在输出中,同时也出现了权限被拒绝的情况。我会进一步研究,找出到底是什么导致了权限被拒绝。(至少对我来说是这样) - Naman
@AlanBateman,我的意思是我在MacOS上执行了一个类似的命令,路径中使用了分号“;”,这就是我分享上面错误的原因。我的命令行路径中有那些“.m2/repository”目录。另外要补充一下细节,当我尝试执行像../.m2/repository/test/test/1.0.0-SNAPSHOT/test-1.0.0-SNAPSHOT.jar这样简单的命令时,也会出现类似的错误(是的,除此之外没有其他命令)。也许是shell的问题。我自己也感到有点困惑。 - Naman
3
在苹果电脑(以及其他Unix/Linux系统)上,“;”用于分隔命令。因此,我猜你是将JAR文件路径作为命令使用了,这可以解释“权限被拒绝”的错误。 - Alan Bateman
@AlanBateman 嗯,事实上我最终将路径指定为命令,这也解释了错误。谢谢 :) - Naman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接