在本文开始前,先给大家分享几个好用的IDEA激活码
这里提供几个最新的激活码,有需要的朋友可以试试,先到先用:
2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新)
2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新)
2022和2023Webstorm激活码,Webstorm稳定专属激活码(持续更新)
Java 9 上的 Maven
我已经写过关于这个的文章,但它又出现了,所以我想快速重复一遍:有可能某些 Maven 插件(或 Gradle 就此而言)使用内部 API 或 Java EE 模块或做任何其他大量的事情不应该。在那种情况下,运行该插件的 JVM 往往是 Maven 进程本身,需要使用额外的命令行标志进行配置。
我使用项目本地.mvn/jvm.config
文件成功地做到了这一点。我将 Maven JVM 在 Java 9 上运行所需的所有标志放在那里,Maven 会自动选择它。
为了防止 Java 8 构建因无法识别的选项而崩溃,我尝试过-XX:+IgnoreUnrecognizedVMOptions
,但没有成功。相反,我写了一个小脚本,根据我构建的版本,将它们重命名为.mvn/jvm.config
和返回以将它们移入或移出。.mvn/jvm9.config
如何添加requires
名称中包含连字符的工件
问题:_
在我的 Maven 依赖项中,我有 [commons-io]。我正在尝试在 module-info.java 中添加此依赖项。就像,[需要 commons-io]。对于 commons-io,它显示编译错误。如何使这项工作?
简洁版本
使用requires commons.io
。(一般来说,请参阅nullpointer 的回答如何学习模块的名称。)
长版
由于commons-io.jar
尚未模块化,您正在创建一个自动模块,模块系统必须为其命名。的 Javadoc描述ModuleFinder
了这是如何发生的:
此方法返回的模块查找器支持打包为 JAR 文件的模块。
module-info.class
[…] 一个在其顶级目录中没有的 JAR 文件定义了一个自动模块,如下所示:
- 如果 JAR 文件在其主清单中具有属性“Automatic-Module-Name”,则其值为模块名称。模块名称是从 JAR 文件的名称派生的。
- 版本和模块名称 […] 源自 JAR 文件的文件名,如下所示:
- […]
- 模块名称中的所有非字母数字字符 ([^A-Za-z0–9]) 都替换为一个点 (“.”),所有重复的点都替换为一个点,并删除所有前导和尾随的点。
最后两个项目符号适用于未为 Java 9 准备的自动模块,例如commons.io
. 这个来自同一个 Javadoc 的例子解释了你的情况:
例如,一个名为“foo-bar.jar”的 JAR 文件将派生一个模块名称“foo.bar”并且没有版本。名为“foo-bar-1.2.3-SNAPSHOT.jar”的 JAR 文件将导出模块名称“foo.bar”和“1.2.3-SNAPSHOT”作为版本。
因此requires commons.io
应该工作。
发布者:admin,转转请注明出处:https://www.ajihuo.com/soft/5402.html