Android Studio同步我的gradle项目后,我在事件日志中看到以下消息:
Android Studio正在使用这个JDK位置:/path/to/my/project/specific/JDK
,这与Gradle默认使用的不同:/path/to/Android/Studio/embedded/JDK
如果在使用Android Studio时从命令行运行Gradle任务,使用不同位置可能会产生多个Gradle守护程序。将Android Studio设置为使用与Gradle和sync项目相同的JDK
我的中有以下内容。bash_简介
:
export JAVA_HOME=/path/to/my/project/specific/jdk
而STUDIO_JDK
文档中说:
设置运行Studio的JDK的位置。启动Android Studio时,它会按此顺序检查STUDIO_JDK
、JDK_HOME
和JAVA_HOME
环境变量。
所以我希望Android Studio会找到/path/to/my/project/特定的/jdk
,但是它没有。有专门针对gradle的特殊JDK设置吗?
在升级到Android studio 3.6版后,我开始收到这个警告。我得到了以下警告:
Android Studio and Gradle are using different locations for the JDK.
Android Studio: C:\Program Files\Android\Android Studio\jre
Gradle: C:\Program Files\AdoptOpenJDK\jdk-11.0.3.7-hotspot
Using different JDK locations might cause Gradle to spawn multiple daemons
when executing tasks for Android Studio and other external processes.
为了修复此警告,我将项目JDK位置更改为Gradle JDK位置。
>
Gradle: C:\Program Files\AdoptOpenJDK\jdk-11.0.3.7-hotspot
单击应用并确定。
最新消息
FormacOS
仅在macOS Mojave10.14.6
上发生。在macOS Catalina10.15.3
上,只需在shell中设置JAVA_HOME
。
这个答案涉及macOS
案例。这并不意味着Linux或Windows解决方案。
TLDR
在macOS
上,Android Studio不会接收中定义的环境变量。当从
。必须在Finder启动时,bash_profile
。应用程序launchctl
中定义环境变量:
launchctl setenv JAVA_HOME /path/to/my/project/specific/jdk
或者,如果您想使用系统定义的JDK:
launchctl setenv JAVA_HOME `/usr/libexec/java_home`
但这只适用于机器的当前会话。接下来,您必须创建一个~/Library/LaunchAgents/environment。plist
文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>my.startup</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>
launchctl setenv JAVA_HOME /path/to/my/project/specific/jdk
</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
或者,如果您想使用系统定义的JDK:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>my.startup</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>
launchctl setenv JAVA_HOME `/usr/libexec/java_home`
</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
plist将在系统重新启动后激活。您还可以使用launchctl load~/Library/LaunchAgents/environment。plist
立即启动。
更深层次的解释
我怀疑Android Studio实际上没有看到我的JAVA_HOME
环境变量,所以我检查了Android Studio进程的环境变量:
$ ps ax | grep Android
13466 ?? S 177:42.60 /path/to/my/Android/sdk/emulator/qemu/darwin-x86_64/qemu-system-x86_64 -netdelay none -netspeed full -no-snapstorage -avd Pixel_2_API_28
13478 ?? S 0:04.88 /path/to/my/Android/sdk/emulator/emulator64-crash-service -pipe com.google.AndroidEmulator.CrashService.13466 -ppid 13466 -data-dir /tmp/foo/9ecb0c71-921f-44b8-8b77-f34ac80bb8fa
40253 ?? R 6:21.34 /Applications/Android Studio-3.5-Preview.app/Contents/MacOS/studio
40342 ?? S 0:00.07 /Applications/Android Studio-3.5-Preview.app/Contents/bin/fsnotifier
40610 s001 S+ 0:00.00 grep Android
$ ps eww 40253
/Applications/Android Studio-3.5-Preview.app/Contents/MacOS/studio TMPDIR=/var/folders/j4/htlnmbf97vlcdszj7_x8g0vh4k3_fp/T/ __CF_USER_TEXT_ENCODING=0x921A9D6:0x0:0x0 SHELL=/bin/false HOME=/Users/myusername Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.zL6tIxvlEo/Render SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.sKG8qr6MNW/Listeners PATH=/usr/bin:/bin:/usr/sbin:/sbin LOGNAME=myusername XPC_SERVICE_NAME=com.google.android.studio-EAP.21860 USER=myusername XPC_FLAGS=0x1
这意味着Android Studio没有像我怀疑的那样看到我的JAVA_HOME
。
接下来,我尝试从终端启动Android Studio:
$ echo $JAVA_HOME
/path/to/my/project/specific/jdk
$ open /Applications/Android Studio-3.5-Preview.app
$ ps eww <Android Studio Pid>
这倾倒了更多的输出,包括我的JAVA_HOME
。因此,我需要弄清楚如何为从Finder.app
启动的应用设置环境变量,我在上面描述了这一点。
在Android Studio同步我的gradle项目后,我在事件日志中看到以下消息: Android Studio正在使用这个JDK位置:,这与Gradle默认使用的不同:如果在使用Android Studio时Gradle任务是从命令行运行的,那么使用不同的位置可能会产生多个Gradle守护进程。将Android Studio设置为使用与Gradle和sync项目相同的JDK 我的中包含以下内
IntelliJ Idea使用作为所有导入的Gradle项目的默认Gradle位置: 我想在默认情况下对导入的Gradle项目使用< code >指定位置: 但是,不可能选择作为默认选项。 如何强制Idea对新的导入项目使用? 联系: IDEA以及如何禁用分级包装生成 对新项目使用本地梯度分布而不是包装
默认情况下,如果安装Oracle JDK,它将不会用作默认java环境。 从/usr/bin/java*到/system/Library/Frameworks/JavaVM的所有系统符号链接都会转发到/system/Library/Frameworks。framework/Versions/Current而不是CurrentJDK。 我怎么能改变这些,有什么脚本可以改变默认的java吗?
我从Ronak Shah和akrun(在本文中)那里学到了如何构造正则表达式,以从数据帧(在我的示例中为alldata)中排除除这些单词之外的所有术语, ^\B WORD 1|WORD 2|WORD 3|WORD 4|WORD 5\ 但出于某些原因,我不明白为什么它给了我 “WORD2”,“WORD3”,不适用 而不是 “WORD1 WORD2 WORD5”,“WORD3”,不适用 以下是我的示例
我们使用gradle构建我们的Java项目,有些基于JDK7,有些基于JDK8。我知道org.gradle.java.home属性,但在我看来它有缺陷。 如果我在'~/.gradle/gradle.properties'中配置它,这将迫使我对所有gradle项目使用相同的JDK。 对此最好的解决方案/变通办法是什么?
我正在使用下面的代码裁剪一个图像。当我打印裁剪的,它的显示和空数组。谁能帮我把这剪裁做好吗