gpt4 book ai didi

java - 使用 Java 9 将 module-info.java 放在哪里?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:53:20 28 4
gpt4 key购买 nike

我有一个 OSGI 应用程序,并且有大约 30 个包(jar 文件)。今天我决定看看它是如何工作的/它是否适用于 Java 9。

所以我开始了我的申请并得到了

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.felix.framework.util.SecureAction (file:/home/.../jar/org.apache.felix.framework-5.4.0.jar) to method java.net.URLClassLoader.addURL(java.net.URL)
WARNING: Please consider reporting this to the maintainers of org.apache.felix.framework.util.SecureAction
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

经过一些阅读我添加了命令行选项

--add-exports java.base/java.net=org.apache.felix.framework 

并创建了包含以下内容的文件 module-info.java:

module org.apache.felix.framework { }

我有两个问题。我应该把这个 module-info.java 放在哪里让 jvm 读取它?我应该如何将此模块信息与 org.apache.felix.framework-5.4.0.jar file/bundle/jar 绑定(bind)?

如果我做错了,请告诉我解决这个问题的正确方向。

最佳答案

一般提示:

回答您的具体问题:

模块声明(module-info.java)放入项目的源根目录(例如src/main/java)。它必须位于要编译为模块描述符 (module-info.class) 的文件列表中。最后一步是将它包含在打包成 JAR 的类文件列表中。在 JAR 中包含模块描述符会将其变成模块化 JAR。如果放置在模块路径上,JPMS 会将其变成一个模块。

如果您毕竟不想创建模块并且希望您的代码在未命名模块中运行,您可以允许它使用占位符 ALL-UNNAMED 访问内部 API - 在这种情况下如果您收到警告,您需要打开该包以进行反射:

--add-opens java.base/java.net=ALL-UNNAMED

不过,更好的解决方案是停止使用内部 API。 😉 由于这不是您的代码,而是您的依赖项,因此您应该寻找或打开 Apache Felix 的问题,要求删除内部 API 的访问权限。

关于java - 使用 Java 9 将 module-info.java 放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46061428/

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