首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 9:将包导出到未命名模块失败

Java 9:将包导出到未命名模块失败
EN

Stack Overflow用户
提问于 2017-06-26 17:55:30
回答 2查看 9.3K关注 0票数 13

我正在尝试在Java9上构建an open-source project。有一些文件我需要使用反射来访问,但我无法访问,因为这些包不是由它们的模块导出的。我使用参数--add-exports将包导出到未命名的模块。

我向环境变量_JAVA_OPTIONS添加了以下参数

代码语言:javascript
复制
-Dsun.reflect.debugModuleAccessChecks=true 
--add-exports=javafx.graphics/com.sun.javafx.scene.traversal=ALL-UNNAMED
--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED

我使用的是最新的JDK 9内部版本(截至今天):

代码语言:javascript
复制
C:\controlsfx>java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+175)
Java HotSpot(TM) 64-Bit Server VM (build 9+175, mixed mode)

以下是我尝试构建项目时的输出:

代码语言:javascript
复制
C:\controlsfx>.\gradlew :controlsfx:build
Picked up _JAVA_OPTIONS: -Dsun.reflect.debugModuleAccessChecks=true --add-exports=javafx.graphics/com.sun.javafx.scene.traversal=ALL-UNNAMED --add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
:controlsfx:compileJava
C:\controlsfx\controlsfx\src\main\java\impl\org\controlsfx\behavior\SnapshotViewBehavior.java:60: error: package com.sun.javafx.scene.control.behavior is not visible
import com.sun.javafx.scene.control.behavior.BehaviorBase;
                                   ^
  (package com.sun.javafx.scene.control.behavior is declared in module javafx.controls, which does not export it to the unnamed module)

C:\controlsfx\src\main\java\impl\org\controlsfx\ReflectionUtils.java:3: error: package com.sun.javafx.scene.traversal is not visible
import com.sun.javafx.scene.traversal.ParentTraversalEngine;
                           ^
  (package com.sun.javafx.scene.traversal is declared in module javafx.graphics, which does not export it to the unnamed module)

编译仍然失败,这让我想知道我做错了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-26 23:09:54

看起来您添加的标志(看起来是正确的)不是添加到编译器中,而是添加到运行Gradle的进程中。这一点的一个指示是通知您关于--illegal-access的消息,它只在java上可用,而不是javac上。

在使用Java9时,有时很难将参数放到正确的位置。给Gradle this might help的。

票数 8
EN

Stack Overflow用户

发布于 2017-06-30 18:40:09

(注意:我无法编译该项目,但一些有问题的错误(例如BehaviorBase)已通过以下代码进行了清理。)

使用JDK9 b175和Gradle 4.1-milestone-1

代码语言:javascript
复制
compileJava {
    options.encoding = "UTF-8"
    options.incremental = true

    options.compilerArgs.addAll([
        "--add-exports",
        "javafx.base/com.sun.javafx.event=ALL-UNNAMED"
    ])  
    options.compilerArgs.addAll([
        "--add-exports",
        "javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED"
    ])  
    options.compilerArgs.addAll([
        "--add-exports",
        "javafx.graphics/com.sun.javafx.scene.traversal=ALL-UNNAMED"
    ])  
}

代码语言:javascript
复制
sourceCompatibility = '9'
targetCompatibility = '9'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44757102

复制
相关文章

相似问题

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