【问题标题】:Gradle ignores daemon ignore flagGradle 忽略守护进程忽略标志
【发布时间】:2017-06-15 04:57:30
【问题描述】:

我在安装了brew install gradle 的 MacOS X 10.12.1 上运行 Gradle 3.2.1,我自己没有设置任何环境变量等,尝试使用 Java 9 EA:

gradle build -Dorg.gradle.java.home=~/jdk-9.jdk/Contents/Home

但是构建失败了

FAILURE:构建失败并出现异常。

  • 出了什么问题:无法启动守护进程。此问题可能是由于守护程序配置不正确造成的。例如, 使用了无法识别的 jvm 选项。

据我所知,它失败是因为守护进程正在尝试使用 maxpermsize JVM 选项(Java 8+ 不支持该选项,但在 Java 8 中它只是一个警告)。

所以我尝试禁用守护进程:

mkdir -p ~/.gradle && echo "org.gradle.daemon=false" >> ~/.gradle/gradle.properties

gradle build 仍在尝试启动守护进程...我在项目目录中删除了~/.gradle.gradle。还有其他想法吗?

$ gradle build -Dorg.gradle.daemon=false -Dorg.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/3.2.1/userguide/gradle_daemon.html.

FAILURE: Build failed with an exception.

* What went wrong:
Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
Please refer to the user guide chapter on the daemon at https://docs.gradle.org/3.2.1/userguide/gradle_daemon.html
Please read the following process output to find out more:
-----------------------

FAILURE: Build failed with an exception.

* What went wrong:
java.lang.ExceptionInInitializerError (no error message)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
> Starting Daemon%

【问题讨论】:

标签: java gradle java-9


【解决方案1】:

好的,所以我想通了,因为我正在像这样运行我的构建:

gradle build -Dorg.gradle.java.home=~/jdk-9.jdk/Contents/Home

Gradle 必须生成一个新线程以使用与 JAVA_HOME 指向的 Java 版本不同的 Java 版本。这是通过使用该 Java 版本生成一个守护线程(即使有 false 选项)来完成的,但它失败了。如果我显然将 JVM 参数传递给构建,也会发生同样的情况。

解决方案是在终端 export JAVA_HOME=~/jdk-9.jdk/Contents/Home 中设置 JAVA_HOME 并运行 gradle build

仍然无法正常工作,因为最新的 Java9 构建打破了 Gradle 的反射,但这是另一回事。

【讨论】:

    【解决方案2】:

    我在这里发布这个是因为它的评论太大了(但肯定不是答案)。

    如果您使用 --debug 运行脚本,您将看到根本错误。我直接通过 java-9 运行它而不设置 JAVA_HOME btw。

    我在几个 jdk-9 构建后遇到了同样的问题并解决了它:

     set _JAVA_OPTIONS "-Dsun.reflect.debugModuleAccessChecks=true 
                 --add-opens=java.base/java.lang=ALL-UNNAMED 
                 --add-opens=java.base/java.util=ALL-UNNAMED 
                 --add-opens=java.base/java.lang.invoke=ALL-UNNAMED 
                 --add-opens=java.base/java.io=ALL-UNNAMED 
                 --add-opens=java.base/java.util.concurrent=ALL-UNNAMED 
                 --add-opens=java.base/java.text=ALL-UNNAMED"
    

    set 而不是 export 因为我使用的是fish,但应该以同样的方式适用于 bash。

    有趣的是,构建 153 仍然失败:

     Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.util.Map java.util.Collections$UnmodifiableMap.m accessible: module java.base does not "opens java.util" to unnamed module @67080771
    

    但这是在 _JAVA_OPTIONS 中指定的。这可能是构建 153 的回归。

    【讨论】:

    • 嘿@Eugene,我最初的问题是 gradle 启动一个守护线程,即使我指定不这样做(这是抱怨冗余的 JVM 参数)但事实证明如果你通过 org.gradle.java.homeorg.gradle.jvmargs as -D 然后 gradle 以这种方式工作,这是可以预料的。您的回答似乎有助于运行 Gradle+Java9,这是我现在遇到的一个不同的问题 :-)
    • @MateuszDymczyk 是的。我知道。我国王预测你最终会遇到和我一样的问题
    • @MateuszDymczyk 顺便说一句,你还能运行你的 gradle 调用吗?因为我不能使用我在回答/评论中显示的设置
    • 我明白了,谢谢!但是,是的,正如您注意到的那样,有一个新问题(module java.base does not ...),这是 Gradle 的 github 存储库中的一个未解决问题,所以我想我需要跳过 Gradle 并手动完成所有工作:-/
    • 不,不幸的是它在路线图上github.com/gradle/gradle/issues/1095
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    相关资源
    最近更新 更多