我正在尝试使用 maven 在 java 9 中构建一个使用依赖项的演示项目:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.10</artifactId>
<version>2.2.0</version>
</dependency>
但是,当我运行 jar 工具来确定要在项目的 module-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 项目必须添加模块声明(module.info.java
)到他们的 JAR 或设置Automatic-Module-Name
他们的 JAR 清单中的条目。
如果您等不及,您可以自己轻松完成后者:
-
创建一个文件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 以用该依赖项替换原始依赖项。
总而言之,这可能不值得付出努力,您可能只想等待。
From 评论 https://stackoverflow.com/questions/46683561/how-to-resolve-a-maven-dependency-with-a-name-that-is-not-compliant-with-the-jav/46685325?noredirect=1#comment80336985_46685325:
需要注意的一件事是,您进行更新的文件必须以新行结尾,否则更新将自动失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)