如何解决名称不符合 java 9 模块系统的 Maven 依赖项?
How to resolve a maven dependency with a name that is not compliant with the java 9 module system?
我正在尝试在 java 9 中使用使用依赖项的 Maven 构建一个演示项目:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.10</artifactId>
<version>2.2.0</version>
</dependency>
然而,当我 运行 jar 工具确定要在我的项目模块中使用的自动模块名称时 - info.java 我收到以下错误:
$ jar --file=spark-mllib_2.10/2.2.0/spark-mllib_2.10-2.2.0.jar --describe-module
Unable to derive module descriptor for: spark-mllib_2.10/2.2.0/spark-mllib_2.10-2.2.0.jar
spark.mllib.2.10: Invalid module name: '2' is not a Java identifier
自动模块算法似乎无法为这个 jar 提供一个有效的名称 java。如果不添加适当的要求,我会收到编译错误,即 spark mllib 中的包丢失,例如:
package org.apache.spark.mllib.linalg does not exist
在我的项目添加官方保留模块名称或它自己的模块信息之前,我是否可以在我的项目中使用这个依赖项?
为了获得适当的长期解决方案,Apache Spark 项目必须向其 JAR 添加模块声明 (module.info.java
) 或在其 JAR 清单中设置 Automatic-Module-Name
条目。
如果你等不及了,你可以自己轻松完成后者:
创建一个包含以下内容的文件manifest.txt
:
Automatic-Module-Name: org.apache.spark.mlib2
将该条目附加到 JAR 的清单中:
jar --update --file spark-mllib_2.10.jar --manifest=manifest.txt
确保它有效:
jar --describe-module --file spark-mllib_2.10.jar
如果您计划在实际项目中使用此 JAR,您可以将其提供给您的同事,我会为此创建一个新版本(也许 2.10.patched-auto-name
?),将其上传到公司的 Nexus,然后编辑 POM 以用那个替换原始依赖项。
总而言之,这可能不值得付出努力,您可能只想等待。
来自:
One thing to note is that the file you make the update with must end in a new line or the update silently fails.
我正在尝试在 java 9 中使用使用依赖项的 Maven 构建一个演示项目:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.10</artifactId>
<version>2.2.0</version>
</dependency>
然而,当我 运行 jar 工具确定要在我的项目模块中使用的自动模块名称时 - info.java 我收到以下错误:
$ jar --file=spark-mllib_2.10/2.2.0/spark-mllib_2.10-2.2.0.jar --describe-module
Unable to derive module descriptor for: spark-mllib_2.10/2.2.0/spark-mllib_2.10-2.2.0.jar
spark.mllib.2.10: Invalid module name: '2' is not a Java identifier
自动模块算法似乎无法为这个 jar 提供一个有效的名称 java。如果不添加适当的要求,我会收到编译错误,即 spark mllib 中的包丢失,例如:
package org.apache.spark.mllib.linalg does not exist
在我的项目添加官方保留模块名称或它自己的模块信息之前,我是否可以在我的项目中使用这个依赖项?
为了获得适当的长期解决方案,Apache Spark 项目必须向其 JAR 添加模块声明 (module.info.java
) 或在其 JAR 清单中设置 Automatic-Module-Name
条目。
如果你等不及了,你可以自己轻松完成后者:
创建一个包含以下内容的文件
manifest.txt
:Automatic-Module-Name: org.apache.spark.mlib2
将该条目附加到 JAR 的清单中:
jar --update --file spark-mllib_2.10.jar --manifest=manifest.txt
确保它有效:
jar --describe-module --file spark-mllib_2.10.jar
如果您计划在实际项目中使用此 JAR,您可以将其提供给您的同事,我会为此创建一个新版本(也许 2.10.patched-auto-name
?),将其上传到公司的 Nexus,然后编辑 POM 以用那个替换原始依赖项。
总而言之,这可能不值得付出努力,您可能只想等待。
来自
One thing to note is that the file you make the update with must end in a new line or the update silently fails.