Compiling module-info.java throws error: module not found
Compiling module-info.java throws error: module not found
我正在将一个简单的应用程序转换为 java 模块。我还需要使这个应用程序自包含在它自己的自定义 JRE 中。我的应用程序依赖于多个现有的库 jar,我也正在将它们转换为模块化 jar。要构建自定义 JRE,我知道所有代码都必须在模块中。 (你不能引用非模块化的罐子。我很难找到它)。
问题是当我为一个依赖于另一个库 jar(我已经转换为模块化)的库 jar 编译模块时 info.java。它 returns "error: module not found:jersey.core"
我已经通过手动创建模块-info.java、编译它然后更新现有的 jar 来更新其中一个库 jar。
1).我创建的文件。
module jersey.core {
exports com.sun.jersey.api.provider.jaxb;
exports com.sun.jersey.api.representation;
exports com.sun.jersey.api.uri;
exports com.sun.jersey.core.header;
exports com.sun.jersey.core.header.reader;
exports com.sun.jersey.core.impl.provider.entity;
exports com.sun.jersey.core.impl.provider.header;
exports com.sun.jersey.core.impl.provider.xml;
exports com.sun.jersey.core.osgi;
exports com.sun.jersey.core.provider;
exports com.sun.jersey.core.provider.jaxb;
exports com.sun.jersey.core.reflection;
exports com.sun.jersey.core.spi.component;
exports com.sun.jersey.core.spi.component.ioc;
exports com.sun.jersey.core.spi.factory;
exports com.sun.jersey.core.spi.scanning;
exports com.sun.jersey.core.spi.scanning.uri;
exports com.sun.jersey.core.util;
exports com.sun.jersey.impl;
exports com.sun.jersey.localization;
exports com.sun.jersey.spi;
exports com.sun.jersey.spi.inject;
exports com.sun.jersey.spi.service;
exports javax.ws.rs;
exports javax.ws.rs.core;
exports javax.ws.rs.ext;
requires java.base;
requires java.desktop;
requires java.logging;
requires java.xml;
}
2).正在编译
"%JDK11_HOME%/bin/javac" --patch-module jersey.core=../originaljars/jersey-core-1.13.jar module-info.java
3).更新 jar
"%JDK11_HOME%/bin/jar" uf ../modules/jersey-core-1.13.jar -C jersey.core module-info.class
这是成功的。
起初我尝试创建没有 "depends on jersey.core" 的 jersey.client 模块-info.java。再次,经历了编译和更新 jar 的相同过程,但是当我将 jar 添加到我的项目时,Eclipse 在 MyTester.java.
中显示以下错误
The type javax.ws.rs.core.MediaType cannot be resolved. It is indirectly referenced from required .class files MyTester.java
这是针对 WebResource 对象(来自 jersey.client)调用方法 webResource.type("application/json") 的行抛出的,其中 return 一个 MediaType。
javax.ws.rs.core.MediaType 来自 jersey.core。所以这让我相信 jersey.client 需要要求 jersey.core.
然后我决定为 jersey.client
更新模块-info.java
我添加了一个要求 jersey.core.
module jersey.client {
exports com.sun.jersey.api.client;
exports com.sun.jersey.api.client.async;
exports com.sun.jersey.api.client.config;
exports com.sun.jersey.api.client.filter;
exports com.sun.jersey.client.impl;
exports com.sun.jersey.client.impl.async;
exports com.sun.jersey.client.osgi;
exports com.sun.jersey.client.proxy;
exports com.sun.jersey.client.urlconnection;
exports com.sun.ws.rs.ext;
requires java.base;
requires java.logging;
requires jersey.core;
}
但是当我尝试编译它时,出现以下错误。
"%JDK11_HOME%/bin/javac" --patch-module jersey.client=../originaljars/jersey-client-1.13.jar module-info.java
module-info.java:15: error: module not found: jersey.core
requires jersey.core;
^
1 error
想通了,这个错误实际上是在告诉我它找不到模块,所以我需要告诉它我的模块所在的位置。
"%JDK11_HOME%/bin/javac" --patch-module jersey.client=../originaljars/jersey-client-1.13.jar module-info.java -p ../modules
module-info.java:15: error: module not found: jersey.core
requires jersey.core;
^
1 error
然后我想也许我还需要显式添加模块。但这也没有用。
"%JDK11_HOME%/bin/javac" --patch-module jersey.client=../originaljars/jersey-client-1.13.jar module-info.java -p ../modules --add-modules jersey.core
module-info.java:15: error: module not found: jersey.core
requires jersey.core;
^
1 error
我是 Java 模块的新手,所以毫无疑问我在做一些愚蠢的事情。提前致歉:(
好吧,原来我确实做了一件蠢事。
1).您必须设置应用程序模块的模块路径。
2).您不能为路径使用相对链接。我将其更新为完整路径。
"%JDK11_HOME%/bin/javac" --patch-module jersey.client=../originaljars/jersey-client-1.13.jar module-info.java --module-path "C:{add your full path here}\modules"
我正在将一个简单的应用程序转换为 java 模块。我还需要使这个应用程序自包含在它自己的自定义 JRE 中。我的应用程序依赖于多个现有的库 jar,我也正在将它们转换为模块化 jar。要构建自定义 JRE,我知道所有代码都必须在模块中。 (你不能引用非模块化的罐子。我很难找到它)。
问题是当我为一个依赖于另一个库 jar(我已经转换为模块化)的库 jar 编译模块时 info.java。它 returns "error: module not found:jersey.core"
我已经通过手动创建模块-info.java、编译它然后更新现有的 jar 来更新其中一个库 jar。
1).我创建的文件。
module jersey.core {
exports com.sun.jersey.api.provider.jaxb;
exports com.sun.jersey.api.representation;
exports com.sun.jersey.api.uri;
exports com.sun.jersey.core.header;
exports com.sun.jersey.core.header.reader;
exports com.sun.jersey.core.impl.provider.entity;
exports com.sun.jersey.core.impl.provider.header;
exports com.sun.jersey.core.impl.provider.xml;
exports com.sun.jersey.core.osgi;
exports com.sun.jersey.core.provider;
exports com.sun.jersey.core.provider.jaxb;
exports com.sun.jersey.core.reflection;
exports com.sun.jersey.core.spi.component;
exports com.sun.jersey.core.spi.component.ioc;
exports com.sun.jersey.core.spi.factory;
exports com.sun.jersey.core.spi.scanning;
exports com.sun.jersey.core.spi.scanning.uri;
exports com.sun.jersey.core.util;
exports com.sun.jersey.impl;
exports com.sun.jersey.localization;
exports com.sun.jersey.spi;
exports com.sun.jersey.spi.inject;
exports com.sun.jersey.spi.service;
exports javax.ws.rs;
exports javax.ws.rs.core;
exports javax.ws.rs.ext;
requires java.base;
requires java.desktop;
requires java.logging;
requires java.xml;
}
2).正在编译
"%JDK11_HOME%/bin/javac" --patch-module jersey.core=../originaljars/jersey-core-1.13.jar module-info.java
3).更新 jar
"%JDK11_HOME%/bin/jar" uf ../modules/jersey-core-1.13.jar -C jersey.core module-info.class
这是成功的。
起初我尝试创建没有 "depends on jersey.core" 的 jersey.client 模块-info.java。再次,经历了编译和更新 jar 的相同过程,但是当我将 jar 添加到我的项目时,Eclipse 在 MyTester.java.
中显示以下错误The type javax.ws.rs.core.MediaType cannot be resolved. It is indirectly referenced from required .class files MyTester.java
这是针对 WebResource 对象(来自 jersey.client)调用方法 webResource.type("application/json") 的行抛出的,其中 return 一个 MediaType。
javax.ws.rs.core.MediaType 来自 jersey.core。所以这让我相信 jersey.client 需要要求 jersey.core.
然后我决定为 jersey.client
更新模块-info.java
我添加了一个要求 jersey.core.
module jersey.client {
exports com.sun.jersey.api.client;
exports com.sun.jersey.api.client.async;
exports com.sun.jersey.api.client.config;
exports com.sun.jersey.api.client.filter;
exports com.sun.jersey.client.impl;
exports com.sun.jersey.client.impl.async;
exports com.sun.jersey.client.osgi;
exports com.sun.jersey.client.proxy;
exports com.sun.jersey.client.urlconnection;
exports com.sun.ws.rs.ext;
requires java.base;
requires java.logging;
requires jersey.core;
}
但是当我尝试编译它时,出现以下错误。
"%JDK11_HOME%/bin/javac" --patch-module jersey.client=../originaljars/jersey-client-1.13.jar module-info.java
module-info.java:15: error: module not found: jersey.core
requires jersey.core;
^
1 error
想通了,这个错误实际上是在告诉我它找不到模块,所以我需要告诉它我的模块所在的位置。
"%JDK11_HOME%/bin/javac" --patch-module jersey.client=../originaljars/jersey-client-1.13.jar module-info.java -p ../modules
module-info.java:15: error: module not found: jersey.core
requires jersey.core;
^
1 error
然后我想也许我还需要显式添加模块。但这也没有用。
"%JDK11_HOME%/bin/javac" --patch-module jersey.client=../originaljars/jersey-client-1.13.jar module-info.java -p ../modules --add-modules jersey.core
module-info.java:15: error: module not found: jersey.core
requires jersey.core;
^
1 error
我是 Java 模块的新手,所以毫无疑问我在做一些愚蠢的事情。提前致歉:(
好吧,原来我确实做了一件蠢事。
1).您必须设置应用程序模块的模块路径。
2).您不能为路径使用相对链接。我将其更新为完整路径。
"%JDK11_HOME%/bin/javac" --patch-module jersey.client=../originaljars/jersey-client-1.13.jar module-info.java --module-path "C:{add your full path here}\modules"