使用Java 9将自定义JMOD添加到模块路径

时间:2016-07-08 12:45:51

标签: java java-9 jigsaw module-path

我使用jmod工具创建了一个简单的JMOD文件,如下所示

$JAVA_HOME/bin/jmod create --class-path classes test/samples.jmod

接下来,我尝试通过运行:

在该模块中执行一个类
java -mp test -m de.mypackage/de.mypackage.Test

导致以下异常:

Error occurred during initialization of VM
java.lang.module.ResolutionException: JMOD files not supported: test/samples.jmod
  at java.lang.module.Resolver.findWithBeforeFinder(java.base@9-ea/Resolver.java:729)
  at java.lang.module.Resolver.resolveRequires(java.base@9-ea/Resolver.java:86)
  at java.lang.module.Configuration.resolveRequiresAndUses(java.base@9-ea/Configuration.java:370)
  at java.lang.module.ModuleDescriptor$1.resolveRequiresAndUses(java.base@9-ea/ModuleDescriptor.java:1986)
  at jdk.internal.module.ModuleBootstrap.boot(java.base@9-ea/ModuleBootstrap.java:263)
  at java.lang.System.initPhase2(java.base@9-ea/System.java:1928)

如果我只是将我的classes目录(我用来创建JMOD文件)设置为模块路径,那么一切都按预期工作。

模块路径上通常不能有JMOD个文件吗?如果是这种情况,有什么理由吗?

1 个答案:

答案 0 :(得分:7)

请参阅http://openjdk.java.net/jeps/261#Packaging:-JMOD-files

  

JMOD文件可以在编译时和链接时使用,但不能在运行时使用   时间。一般来说,在运行时支持它们需要我们   准备好即时提取和链接本机代码库。这个   在大多数平台上是可行的,虽然它可能非常棘手,而且我们   没有看到很多需要这种能力的用例,所以   简单性我们选择限制JMOD文件的效用   释放。