当前位置: 首页 > 知识库问答 >
问题:

如何解决名称与java 9模块系统不兼容的maven依赖关系?[副本]

鲁滨海
2023-03-14

我正试图用maven在java 9中构建一个使用依赖关系的演示项目:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-mllib_2.10</artifactId>
    <version>2.2.0</version>
</dependency>

然而,当我运行jar工具来确定要在项目的模块信息中使用的自动模块名称时。java I出现以下错误:

$ 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名称。如果不添加适当的requires,我会得到spark mllib中缺少的包的编译错误,例如:

package org.apache.spark.mllib.linalg does not exist

在我的项目中添加正式的保留模块名或其自己的模块信息之前,我是否可以使用此依赖关系?

共有1个答案

芮瑾瑜
2023-03-14

为了获得合适的长期解决方案,Apache Spark项目必须向其JAR中添加模块声明(module.info.java),或者在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以用该版本替换原始依赖项。

    总而言之,这可能不值得努力,你可能只想等待。

    从评论中:

    需要注意的是,进行更新的文件必须以新行结尾,否则更新会自动失败。

  •  类似资料:
    • 我正在尝试将现有的JavaFX应用程序移植到Java9。 这是建造。格雷德尔 我的模块声明:

    • 主要内容:模块系统特征,创建模块Java 9是一种称为模块的新型编程组件。模块是一个自我描述的代码和数据集合,并有一个名称来标识它。 模块系统特征 使用模块组件,Java 9中增加了以下增强功能 - 引入了一个新的可选阶段,即链接时间。这个阶段介于编译时间和运行时间之间。 在此阶段,可以组合和优化一组模块,使用jlink工具制作自定义运行时映像。 javac,jlink和java有额外的选项来指定模块路径,它们进一步定位模块的定

    • 谁能告诉我Maven中的依赖项Hamcrest有什么问题吗?这是一个遗憾,但我不能在这里附上截图。 当我试图更新Maven索引时,什么也没有发生。

    • 我有一个多模块Maven项目,其中包含子模块ModuleA和ModuleB等。ModuleA将ModuleB列为依赖项。但是,当仅构建模块A时,Maven不会解决模块B的依赖关系-导致。我想避免构建整个父级以使构建更快。目前我发现让它工作的唯一方法是使用exec插件和脚本,将父项目称为“ModuleB, ModuleA”,这意味着我必须在每次依赖项更改时更改脚本(例如添加ModuleC)。 是否有

    • 在使用Maven一段时间后,我对Maven在构建体系结构中带来的许多特性感到兴奋,尤其是依赖项管理。然而,我一次又一次地遇到了一个问题--Maven如何解决多模块项目之间的依赖关系。我想知道这是否是当前Maven实现的大缺陷和/或是否有任何令人满意的解决方案。 假设我有一个多模块的Maven项目。父pom包含三个模块--moduleA(jar)、moduleB(jar)和moduleC(war)。

    • Spring数据集1.7。0.0版本对1.7版具有编译时依赖性。slf4j api和jcl-over-slf4j中的12个。我在maven pom文件中定义了以下依赖项,因为我们需要slf4j 1.7。10依赖性(很少有其他jar依赖于此): 我有一个内部maven repo作为maven中央存储库。以下是我在不同场景中看到的行为,基于maven central中可用的JAR: 我的问题: 在场景