非模块化应用程序中的Java11“拆分包”问题

时间:2019-07-13 14:13:56

标签: java gradle java-11

我正在尝试将现有的以Java8编写的非模块化多项目gradle应用程序升级到Java11。当我切换到Jdk11时,由于其中一个子项目中带有“ javax.annotation:javax.annotation-api:1.3.2”的“拆分包”问题,我开始获取“ java.lang.NoClassDefFoundError:javax / annotation / Generated” ”和“ com.google.code.findbugs:jsr305:1.3.9”。

据我了解,对于类路径中的jar而言,拆分包不应该成为问题,并且这两个jar都在类路径中。我不确定为什么会收到此错误。请帮助我了解我要去哪里错了。

在搜索split软件包后,我遇到了以下2种解决方案来解决此问题:

  1. 添加patch-module作为编译器参数。需要在子项目的build.gradle文件中添加以下代码片段:
    compileJava {
        doFirst {
            def jsr305 = 
    classpath.filter{it.name.contains('jsr305')}.asPath
            classpath = classpath.filter{!it.name.contains('jsr305')}
            options.compilerArgs += [
                '--patch-module', "java.annotation=$jsr305"
            ]
        }
    }

我认为应该存在module.info文件,以使--patch-module正常工作。

  1. 我尝试了gradle-modules-plugin,但看起来该插件也需要module.info文件才能工作。

我不想迁移到模块化结构。

是否可以在不模块化应用程序的情况下解决错误?

0 个答案:

没有答案