首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 9中的拆分包和Bootstrap Jars

Java 9中的拆分包和Bootstrap Jars
EN

Stack Overflow用户
提问于 2017-10-07 03:16:07
回答 1查看 425关注 0票数 3

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

代码语言:javascript
复制
bootstrap.jar
- com
  - example
    - Foo.class
    - Bar.class
    - Baz.class

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

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

src/com/example文件夹实际上包含Bar.javaBaz.java和另一个文件Foo.dyvil。后者是用基于JVM的编程语言编写的。因此,依赖关系链如下所示:

代码语言:javascript
复制
Bar.java -> Foo.dyvil -> Baz.java

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

现在来看实际问题:由于Java 9中不允许拆分包,有没有办法使用我的项目中描述和使用的"bootstrap“jar文件来实现”拆分构建“?或者还有其他方法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-10-07 03:28:01

不过,长期的解决方案是将这些包解析为存在于单个模块中,然后模块化代码。

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

代码语言:javascript
复制
--patch-module <module>=<file>(<pathsep><file>)*

就像你的情况一样

代码语言:javascript
复制
--patch-module com.example=bootstrap.jar

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46612514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档