gpt4 book ai didi

java - 编译 module-info.java 抛出错误 : module not found

转载 作者:行者123 更新时间:2023-12-02 01:25:56 25 4
gpt4 key购买 nike

我正在将一个简单的应用程序转换为 java 模块。我还需要使该应用程序包含在它自己的自定义 JRE 中。我的应用程序依赖于多个现有的库 jar,我也将它们转换为模块化 jar。要构建自定义 JRE,我知道所有代码都必须位于模块中。 (你不能引用非模块化 jar 。我通过艰难的方式发现了这一点)。

问题是当我为依赖于另一个库 jar(我已经转换为模块化)的库 jar 之一编译 module-info.java 时。它返回“错误:找不到模块:jersey.core”

我已经通过手动创建 module-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

这次成功了。

<小时/>

首先,我尝试创建 jersey.client module-info.java,而不使用“depends on jersey.core”。再次经历了编译和更新 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)调用返回 MediaType 的方法 webResource.type("application/json") 的行引发的。

javax.ws.rs.core.MediaType 来自 jersey.core。所以这让我相信 jersey.client 需要 jersey.core。

然后我决定更新 jersey.client 的 module-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 - 编译 module-info.java 抛出错误 : module not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57585820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com