我目前正在尝试将旧的代码库从Java 8转换为Java 11。这个旧代码库的一部分使用了一些Java内部类(特别是sun.security.x509)。为了在Java 11中实现这一点,我必须在Gradle中的compileJava任务中添加“添加导出”标志,以允许这个内部类在其模块外可见。
所以我从这个开始:
compileJava {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
options.compilerArgs = [ '--add-exports=java.base/sun.security.x509=ALL-UNNAMED' ]
}
这似乎不起作用,因为添加导出不会传递给javac,所以我的代码无法编译。
但是,如果我改为这样做,它可以正常工作,将添加导出正确地传递到javac进程。
tasks.withType (JavaCompile) {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
options.compilerArgs = [ '--add-exports=java.base/sun.security.x509=ALL-UNNAMED' ]
}
很明显,这里有一些我不理解的地方。在我看来,它们在功能上执行相同的操作,但第二个操作有效,而第一个操作失败。
有人能告诉我区别是什么吗?为什么一个有效,另一个失败?