假设我有一些lib.jar我没有源代码的库(或者它是用一些不熟悉模块的非Java语言编写的).lib.jar没有module-info.class,我不想将它用作自动模块,所以我想注入module-info.class它.
我首先module-info.java使用以下命令生成:
jdeps --generate-module-info . lib.jar
Run Code Online (Sandbox Code Playgroud)
假设这产生了类似的东西:
module lib {
exports package1;
exports package2;
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试编译它但javac失败因为包package1而且package2不存在:
> javac module-info.java
module-info.java:4: error: package is empty or does not exist: package1
Run Code Online (Sandbox Code Playgroud)
当然,我可以在其中创建目录package1和package2虚拟类,但是有更好的方法吗?
我试图通过限制它包含的模块来减少我的应用程序的大小.我已经为我的运行时使用了这个jlink.然而,当我运行javapackager使用--add-modules,并--limit-modules选择用逗号分隔的相同的小套我用于运行时模块的列表,它坚持将所有模块的反正.它似乎不想尊重我给它的选项.如何获得该工具来限制它添加到我的应用程序包中的模块?
"Adding modules: [java.base, java.desktop, java.naming, java.sql, java.xml, java.logging,
java.management, java.scripting, java.compiler, java.rmi, java.activation, jdk.charsets, jdk.xml.dom,
java.datatransfer, jdk.httpserver, javafx.base, java.security.sasl, jdk.zipfs, jdk.crypto.ec,
jdk.management.agent, java.sql.rowset, javafx.swing, jdk.jsobject, jdk.sctp, java.smartcardio,
jdk.unsupported, jdk.scripting.nashorn, java.security.jgss, javafx.graphics, javafx.fxml, jdk.dynalink,
javafx.media, jdk.accessibility, jdk.security.jgss, javafx.web, java.xml.crypto, jdk.jfr, jdk.packager.services, jdk.net, javafx.controls,
java.prefs, jdk.naming.rmi, jdk.jdwp.agent, java.instrument, jdk.management,
jdk.security.auth, java.management.rmi, jdk.naming.dns, jdk.localedata] to runtime image."
outputDir = ...
modulePath = [/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/jmods]
addModules = [java.base, java.desktop, java.naming, java.sql, java.xml, java.logging, java.management, java.scripting, java.compiler, …Run Code Online (Sandbox Code Playgroud) 我正在使用这个Github项目来接触Java 9中的新模块化功能.我想为项目添加依赖项并能够构建本机映像.但是,当我尝试向pom.xml添加新的依赖项,并将requires语句添加到module-info.java时,我从maven-jlink-plugin中收到以下错误:
Error: module-info.class not found for joda.time module
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用它作为概念证明,我可以使用新的链接阶段部署图像,但自然我需要能够具有外部依赖性,我需要使用maven(工作约束).
对mod-jar/pom.xml的更改
...
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>
</dependencies>
...
Run Code Online (Sandbox Code Playgroud)
MOD-罐/ module-info.java
module com.soebes.nine.jar {
requires java.base;
requires joda.time;
exports com.soebes.example.nine.jar;
}
Run Code Online (Sandbox Code Playgroud)
日志:
[INFO] --- maven-jlink-plugin:3.0.0-alpha-1:jlink (default-jlink) @ mod-jlink ---
[INFO] Toolchain in maven-jlink-plugin: jlink [ /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/jlink ]
[INFO] The following dependencies will be linked into the runtime image:
[INFO] -> module: com.soebes.nine.one ( /Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-1/target/jmods/com.soebes.nine.one.jmod )
[INFO] -> module: com.soebes.nine.two ( /Users/sebastianrestrepo/Projects/jdk9-jlink-jmod-example/maven-example/mod-2/target/jmods/com.soebes.nine.two.jmod )
[INFO] -> module: com.soebes.nine.jar ( …Run Code Online (Sandbox Code Playgroud)