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

Java 9中的分割包和引导jar

仲浩歌
2023-03-14

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

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

<code>src</code>目录包含一个类<code>com.example。条形图依赖于Foo>以及com.example的模块定义。<code>引导程序。jar文件不包含模块信息,因为它是在Java9之前编译的,所以它使用一个名为bootstrap的自动模块。问题是现在包<code>com。示例在两个模块com中定义。示例引导

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

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

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

在构建过程中,它被编译成< code>Foo.class,该文件被放在一个新的Jar文件中,该文件后来取代了< code>bootstrap.jar。放置所有这些文件的原因是,Java和Dyvil编译器都不能处理其他语言的文件,所以它们需要访问以前编译的类。这就是为什么有< code>bootstrap.jar的原因。

现在来看实际的问题:既然Java9中不允许拆分包,那么有什么方法可以像我的项目中所描述和使用的那样使用“引导”jar文件来实现“拆分构建”吗?或者还有其他方法吗?

共有1个答案

董花蜂
2023-03-14

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

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

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

就像你一样

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

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

 类似资料:
  • 我是Java和Spring Boot的初学者,我在Spring Boot上使用< code>Pagination,用这个代码我返回用户列表,如果我想返回页数,我必须这样做? 我知道使用我可以获取页数,但如何返回它?

  • 问题内容: 我有以下字符串: 我“肯定”想“上学”。 现在,我想在省略号处分割此字符串,即我想获得以下输出: 我会 一定 喜欢 上学 。 问题答案: 如果您是用引号()代替省略号,最简单的解决方案是使用 :

  • 如何解决composer中的分段错误?安装后会发生这种情况 /c/ProgramData/ComposerSetup/bin/composer:第18行:1024分段错误php"${dir}/composer.phar"$*

  • 问题内容: 如何在特定索引处拆分字符串?例如,在索引10处分割字符串,使该字符串现在等于直到索引10的所有内容,然后转储其余部分。 问题答案: 关于或取决于索引10是否应包含或不包含索引呢?您必须检查一下。 一个替代方案是

  • 问题内容: 为什么我经常出错? 其实我也尝试过这个: 谢谢 问题答案: Swift对于运算符周围的空白有严格的规定。除’/’是 二进制运算符 。 重要规则是: 如果运算符的两边或两边都没有空格,则将其视为二进制运算符。例如,a + b和a + b中的+运算符被视为二进制运算符。 如果运算符仅在左侧具有空格,则将其视为前缀一元运算符。例如, b中的 运算符被视为前缀一元运算符。 如果运算符仅在右侧具