gpt4 book ai didi

java - 在 Java 9 中拆分包和 Bootstrap Jar

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

似乎在 Java 9 中不允许有所谓的拆分包,即在两个不同的模块中定义相同的包。这会导致我的迁移过程出现问题:(Gradle) 项目包含一个名为 bootstrap.jar 的 Jar 文件,其结构如下:

bootstrap.jar
- com
- example
- Foo.class
- Bar.class
- Baz.class

src 目录包含一个依赖于 Foo 的类 com.example.Bar 以及一个模块定义,用于 com.example. bootstrap.jar 文件不包含模块信息,因为它是在 Java 9 之前编译的,所以它使用一个名为 bootstrap 的自动模块。问题是现在 com.example 包在 com.examplebootstrap 这两个模块中都定义了。

首先,存在此 bootstrap.jar 文件的原因如下:

src/com/example文件夹实际上包含Bar.javaBaz.java和另一个文件Foo.dyvil 。后者是用基于 JVM 的编程语言编写的。所以依赖链看起来像这样:

Bar.java -> Foo.dyvil -> Baz.java

在构建过程中,它被编译为 Foo.class,它被放置在一个新的 Jar 文件中,该文件稍后会替换 bootstrap.jar。放置所有这些文件的原因是 Java 和 Dyvil 编译器都无法处理其他语言文件,因此它们需要对先前构建的编译类进行一些访问。这就是 bootstrap.jar 的原因。

现在解决实际问题:由于 Java 9 中不允许拆分包,是否有任何方法可以使用我的项目中描述和使用的“ Bootstrap ”jar 文件实现“拆分构建”?还是有其他方法?

最佳答案

尽管对此的长期解决方案是将此类包解析为存在于单个模块中,然后模块化代码。

作为临时解决方案,您可以使用以下选项:-

--patch-module <module>=<file>(<pathsep><file>)*

就你而言

--patch-module com.example=bootstrap.jar

请记住,--patch-module 选项仅用于测试和调试。强烈建议不要在生产环境中使用它。

关于java - 在 Java 9 中拆分包和 Bootstrap Jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46612514/

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