当前位置: 首页 > 知识库问答 >
问题:

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

帅颖逸
2023-03-14

我用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文件)设置为modulepath,那么一切都正常工作。

在modulepath上通常不可能有JMOD文件吗?如果是这样的话,有什么原因吗?

共有1个答案

穆浩皛
2023-03-14

看见http://openjdk.java.net/jeps/261#Packaging:-JMOD文件

JMOD文件可以在编译时和链接时使用,但不能在运行时使用。要在运行时支持它们,通常需要我们随时准备提取和链接本机代码库。这在大多数平台上都是可行的,尽管它可能非常棘手,而且我们还没有看到许多需要此功能的用例,因此为了简单起见,我们选择在本版本中限制JMOD文件的实用性。

 类似资料:
  • 我正在尝试从文件中添加路由,但我事先不知道实际参数,因此我需要有一个通过处理参数的通用函数。 要添加路线,我使用,如下所示: 以上工作正常。 但是enrty path参数不是固定的,我需要从文件中读取它们,为了实现这一点,我正在尝试这样的事情: 但它抛出此错误: FastAPI尝试在<code>foo</code>签名中查找不存在的实际参数<code>xyz</code>。 FastAPI中有什么

  • 在java9之前,在运行时通过编程方式将外部jar添加到类路径中,每个人都使用: 现在使用java9我们遇到了问题: 在Java9中不再工作。在jdk9下,如何在运行时以编程方式向类路径添加外部jar?

  • 虽然Blockly定义了许多标准块,但大多数应用程序需要定义和实现至少一些域相关块。 块由三个部分组成: 块定义对象:定义块的外观和行为,包括文本,颜色,字段和连接。 工具箱参考:工具箱XML中对块类型的引用,因此用户可以将其添加到工作区。 生成器函数:生成此块的代码字符串。它是用JavaScript编写的,即使目标语言不是JavaScript,甚至是用于Android端的Blockly。 块定义

  • 我正在使用Java代理和Javassist向一些JDK类添加一些日志记录。实际上,当系统加载一些TLS类时,Javassist会向它们添加一些额外的字节码,以帮助我调试一些连接问题。 问题是,考虑到这个类包含在代理jar中: 在我的代理的转换方法中,假设我试图使用javassist调用该类: 你认为这行得通,但我得到了这个: 有没有办法将该类[]添加到应用程序的类路径中?

  • 有人能帮我解决我遇到的自定义Prestashop模块1.6版本的文件路径问题吗? 以下内容在本地主机环境中非常有效: 但是不能在实时服务器上工作。以下方法确实有效: 这是不可接受的,因为有些客户不会使用默认的引导主题。 对此问题的任何帮助都将不胜感激。 谢谢

  • 我正在尝试使用SWIG将旧的Tcl接口替换为C。下面是一个示例类: 这是使用它的标准方法: 但我想保留旧界面的简单性,它不使用”。我发现我可以做如下事情: 它看起来很简单,工作完美,但是,当然,我不能在用户脚本中使用定义。我不确定还能把它放在哪里。有办法把它放在. i文件中吗?