Tag: java module

如何将模块声明注入JAR?

假设我有一些库lib.jar ,我没有源代码(或者它是用一些不熟悉模块的非Java语言编写的)。 lib.jar没有module-info.class ,我不想将它用作自动模块,所以我想将module-info.class注入其中。 我首先使用以下命令生成module-info.java : jdeps –generate-module-info . lib.jar 假设这产生了类似的东西: module lib { exports package1; exports package2; } 然后我尝试编译它但javac失败,因为包package1和package2不存在: > javac module-info.java module-info.java:4: error: package is empty or does not exist: package1 当然,我可以在其中创建带有虚拟类的目录package1和package2 ,但是有更好的方法吗?

如何在Java 9中运行时访问javax.annotation.Resource

我有一个测试: public class ResourceTest { @Test public void test() throws ClassNotFoundException { Class.forName(“javax.annotation.Resource”); } } 它试图访问javax.annotation.Resource 。 在java 8中它可以工作,但是在java 9中(我使用的是Oracle JDK 9),它失败了ClassNotFoundException 。 正如Spring所解释的那样:@Resource注入在JDK9下停止工作 ,JDK javax.annotation.Resource在Java 9中默认不可用。 我正在尝试使用模块描述符访问它: module test { requires java.xml.ws.annotation; requires junit; } 在这里,我特意请求访问java.xml.ws.annotation模块(包含javax.annotation.Resource )。 但测试仍然失败。 当我删除那个requires子句并添加一个包含javax.annotations.Resource的依赖项(作为库)时,它可以工作: javax.annotation javax.annotation-api 1.3.1 当我同时添加它们( pom.xml Maven依赖并requires java.xml.ws.annotation )时,IDEA中的编译失败并显示以下消息: the unnamed module reads package javax.annotation from […]

列出应用程序启动期间解析的模块

如何在启动应用程序时了解已解决的模块列表,以便确定可从根模块访问所有服务提供程序的内容。

Java 9:Eclipse中无法访问模块java.xml.bind

我将Java 8中的maven项目迁移到Java 9项目而没有Eclipse OxyGen 1a任何构建工具。 所以我的module-info.java看起来像这样: 但java.xml.bind是不可访问的,虽然它在我的模块路径中: 那么这里有什么问题?

JDK9:发生了非法reflection访问操作。 org.python.core.PySystemState

我正在尝试使用Java9(JDK9)运行DMelt程序( http://jwork.org/dmelt/ )程序,它给了我错误,例如: WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by org.python.core.PySystemState (file:/dmelt/jehep/lib/jython/jython.jar) to method java.io.Console.encoding() WARNING: Please consider reporting this to the maintainers of org.python.core.PySystemState WARNING: Use –illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release […]

在Java 9中运行时扫描类路径/模块路径

我似乎无法找到关于是否仍然可以在运行时扫描所有可用类(用于接口,注释等)的任何信息,就像Spring,Reflections和许多其他框架和库当前所做的那样,面对Jigsaw相关的更改类的加载方式。 编辑 :这个问题是关于扫描寻找类的真实物理文件路径。 另一个问题是关于动态加载类和资源。 这是相关的,但非常重复 。 更新 :Jetty项目为此制定了标准化API的JEP提议 。 如果你有办法帮助实现这个目标,请做。 否则,等等和希望。 更新2 :找到这个相关的发声post。 引用后代的代码片段: 如果您真的只是想要获取引导层中模块的内容(在启动时解析的模块),那么您将执行以下操作: ModuleLayer.boot().configuration().modules().stream() .map(ResolvedModule::reference) .forEach(mref -> { System.out.println(mref.descriptor().name()); try (ModuleReader reader = mref.open()) { reader.list().forEach(System.out::println); } catch (IOException ioe) { throw new UncheckedIOException(ioe); } });

无法在Java 9中为自动生成的模块名称派生模块描述符?

我的项目依赖于Netty Epoll传输。 这是依赖: io.netty netty-transport-native-epoll ${netty.version} ${epoll.os} 此依赖项的自动生成的模块名称为: netty.transport.native.epoll 由于native 9中保留了native关键字,因此无法将此模块作为依赖项添加到我的项目中: module core { requires netty.transport.native.epoll; } 由于: module not found: netty.transport. 此外,jar工具–describe-module报告以下内容: 无法导出模块描述符:netty-transport-native-epoll-4.1.17.Final-SNAPSHOT-linux-x86_64.jar netty.transport.native.epoll:无效的模块名称:’native’不是Java标识符 有没有解决方法? (当然,除了“发布正确的网络工件”)。 编辑 : 作为维护者的快速修复 – 您可以添加下一行来构建: netty.transport.epoll