当前位置: 首页 > 知识库问答 >
问题:

Gradle-新创建的守护进程具有与预期不同的上下文

崔宇
2023-03-14

我在Ubuntu中通过Nix安装了OpenJDK(LinuxUbuntu 4.13.0-32-通用#35~16.04.1-Ubuntu SMP Thu Jan25 10:13:43UTC 2018x86_64x86_64x86_64GNU/Linux)。

gorre@uplink:~$ java -version
openjdk version "1.8.0_172"
OpenJDK Runtime Environment (build 1.8.0_172-02)
OpenJDK 64-Bit Server VM (build 25.172-b02, mixed mode)

gorre@uplink:~$ which java
/home/gorre/.nix-profile/bin/java

gorre@uplink:/nix/store/f9053w1lfrkhgqfpr6l82ssxmjpsni1j-openjdk-8u172b02$ ll
total 24K
dr-xr-xr-x 3 gorre 4.0K Dec 31  1969 share/
dr-xr-xr-x 2 gorre 4.0K Dec 31  1969 nix-support/
dr-xr-xr-x 3 gorre 4.0K Dec 31  1969 lib/
lrwxrwxrwx 1 gorre   80 Dec 31  1969 jre -> /nix/store/n7rh8v269qb1fs6314yq0wg7q8cajw0g-openjdk-8u172b02-jre/lib/openjdk/jre/
dr-xr-xr-x 2 gorre 4.0K Dec 31  1969 include/
lrwxrwxrwx 1 gorre   76 Dec 31  1969 bin -> /nix/store/f9053w1lfrkhgqfpr6l82ssxmjpsni1j-openjdk-8u172b02/lib/openjdk/bin/

现在,当我尝试在IntelliJ IDEA 2017.3.4(终极版)中构建/运行一个使用Gradle 4.4的项目时,我得到了以下错误:

The newly created daemon process has a different context than expected.
It won't be possible to reconnect to this daemon. Context mismatch: 
Java home is different.
Wanted: DefaultDaemonContext[uid=null,javaHome=/nix/store/f9053w1lfrkhgqfpr6l82ssxmjpsni1j-openjdk-8u172b02,daemonRegistryDir=/home/gorre/.gradle/daemon,pid=12824,idleTimeout=null,daemonOpts=-XX:+HeapDumpOnOutOfMemoryError,-Xmx1024m,-Dfile.encoding=UTF-8,-Duser.country=US,-Duser.language=en,-Duser.variant]
Actual: DefaultDaemonContext[uid=b813ba02-e4a6-4bfe-91b2-8ed32963f7cc,javaHome=/nix/store/f9053w1lfrkhgqfpr6l82ssxmjpsni1j-openjdk-8u172b02/lib/openjdk,daemonRegistryDir=/home/gorre/.gradle/daemon,pid=14245,idleTimeout=10800000,daemonOpts=-XX:+HeapDumpOnOutOfMemoryError,-Xmx1024m,-Dfile.encoding=UTF-8,-Duser.country=US,-Duser.language=en,-Duser.variant]

我到处搜索,但其他答案/解决方案不起作用,甚至没有在gradle.properties(项目内部或用户家中)中指定Java:

org.gradle.java.home = /nix/store/f9053w1lfrkhgqfpr6l82ssxmjpsni1j-openjdk-8u172b02

另一方面,如果我在终端上构建/运行项目,它工作正常。有什么线索吗?

更新#1

这是我在IntelliJ IDEA中对Gradle和SDK的配置


共有2个答案

邴墨竹
2023-03-14

我明白了这一点,尽管它就在我面前——我没有仔细阅读错误信息。

基本上,Nix设置的默认Java主页是:/Nix/store/f9053w1lfrkhghqfpr6l82ssxmjpsni1j-openjdk-8u172b02/lib/openjdk,而我在IntelliJ IDEA中手动设置的主页是:/Nix/store/f9053w1lfrkhghqfpr6l82ssxmjpsni1j-openjdk-8u172b02(注意缺少的。/lib/openjdk)。

在IntelliJ IDEA中纠正了这一点之后,一切都很好。我不需要任何额外的和/或特殊的东西。

我希望这能帮助未来的其他人——或者任何其他快速阅读者。

明宜年
2023-03-14

检查Gradle守护进程的想法设置:

Build, Execution, Deployment -> Build Tools -> Gradle.

有一个选项“Gradle JVM”。看起来想法使用Java9或其他不兼容的JVM来运行Gradle。你应该从Nix中选择你的Java版本。

 类似资料:
  • 我想开始用Android Developer Studio开发移动应用程序。我下载了符合SDK和JAVA要求的Android Developer Studio。但当我试图开始我的项目时,我遇到了一个错误: 我还从互联网上查看了sth,并试图从项目结构中更改JDK的位置。但这对我不起作用。知道我做错了什么吗?

  • 维基百科中守护进程的解释 守护进程是一个运行后台进程, 非交互式用户直接控制的在计算机程序 Gradle 守护进程是一个后台进程, 它运行着繁重的构建, 然后在构建等待下一次构建的之间保持自身存在. 这使得数据和代码在下一次构建前已经准备好,并存入内存中. 这显著的提高了后续构建的性能. 启用Gradle守护进程是一种节约构建时间的廉价方式. 强烈建议在所有开发机器上启用Gradle的守护进程.但

  • 建议在开发环境中使用Gradle的守护进程,不建议在持续集成环境和构建服务器环境中使用守护进程. 守护进程可以更快的构建,这对于一个正坐在椅子前构建项目的人来说非常重要.对于CI构建来说,稳定性和可预见性是最重要的.为每个构建运行时用一个新的,完全孤立于以前的版本的程序,更加可靠。

  • 本文向大家介绍linux下的守护进程,包括了linux下的守护进程的使用技巧和注意事项,需要的朋友参考一下 Linux下的常驻进程的作用不可忽略,但这里面的问题也不能忽略,怎么启动进程,怎么结束进程,怎么在进程挂掉之后重启进程都要设计的合理。下面看一个shell控制的php常驻进程的例子。 不废话,直接捞干货,上代码,通过代码来讲解更容易理解: 只里面有几个要强调的地方: 我用这个shell去调用

  • 我有一个自定义的CI运行器来构建我们的Gradle项目。我们面临的问题是Gradle守护进程很快就会停止,因此每个作业都需要很长时间,因为启动了gradle守护进程: 启动Gradle守护进程时,无法重用3个繁忙和32个停止的守护进程,请使用--status了解详细信息 有没有办法让一些守护进程保持新鲜和就绪?让20个守护进程始终处于就绪状态?