我想创建一个包含第3方jar的Java 9运行时镜像。我已经做了一个简单的Java项目(称为Example)来调用实用程序jar(称为ExampleUtil.jar)。 Examplemodule-info.java目录中包含src,并且在Eclipse中运行良好(我已将ExampleUtil.jar添加为模块依赖项)。如果我调用:

jlink -v
    --module-path "C:\Program Files\Java\jdk-9.0.4\jmods";C:\Temp
    --add-modules com.example.steven
    --output C:\Temp\image.steven
    --launcher launch=com.example.steven/com.example.steven`

...我收到错误消息:



有没有一种使用不是模块的jar创建运行时镜像的方法?谢谢你。

最佳答案

不,jlink要求所有包含的模块都是显式的,这意味着它们需要具有模块描述符。这是the documentation关于jlink模块路径的内容:



请注意,没有“普通JAR”(即不带描述符的JAR)。

但是,您可以将现有的第三方JAR升级为模块化JAR(需要一些努力)。这些步骤是:

  • 获取JAR及其所有依赖项
  • (手动或使用JDeps)为其创建module-info.java
  • 编译为module-info.class with --patch-module to tell the compiler about the sources
  • 使用jar --update将模块声明添加到现有的JAR


  • 另外,您可以使用ModiTect之类的工具来为您完成这些操作。

    09-04 22:55
    查看更多