为了构建一些 Android 项目,需要设置环境变量JAVA_HOME
。(请参阅此堆栈交换问题和颤振错误报告。
我正在从事的一个项目就是这种情况。我想更改 Gradle 文件,因此无需设置JAVA_HOME
。
Gradle 有没有办法获取封闭的 Android Studio 进程使用的 JDK 路径(或者让进程在没有用户干预的情况下传入 JDK(?这应该在未设置JAVA_HOME
时起作用。
通常有两个选项可用:
a( 编辑gradle.properties
文件并定义要使用的 JDK:
org.gradle.java.home=(path to JDK home)
在那里它不能动态设置,因为它是鸡蛋/母鸡的问题。
它也可能在其他计算机上失败,因为路径可能会有所不同。
但是可以将其作为命令行选项传递:
./gradlew -Dorg.gradle.java.home=$JAVA_PATH
供参考:构建环境。
b( 但是,也可以在文件gradlew
之上添加export JDK_HOME
语句。想出了一个shell脚本,它至少可以检测Linux上的默认JDK安装(Android Studio在JRE上运行(:
tmp=`which java`
export JAVA_HOME=${tmp::-9}
echo $JAVA_HOME
/usr/java/jdk1.8.0_172
当然,人们还必须考虑根本不存在JDK:
/usr/bin/which: no java in ...
通常,这假设默认的JDK已经设置了替代方案,就像包管理器通常会做的那样; 例如yum install jdk1.8.0_102.x86_64
。这里的问题是,没有简单的方法来识别在Windows上使用哪个JDK路径,因为Windows没有which
命令,并且可能必须从注册表中读取。帮助程序 PS 脚本或可执行文件可以查找该值并根据需要截断,从文件gradlew.bat
调用。可能还有其他方法可以获取路径。
您可以在your_project_path/app/build.gradle
中定义任务
task javaHome {
println "JAVA_HOME:" + System.getProperty("java.home")
}
运行任务:
./gradlew -q app:javaHome
结果:
JAVA_HOME:/usr/lib/jvm/java-8-openjdk-amd64/jre