尝试运行gradle时,出现以下错误:
# gradle
ERROR: JAVA_HOME is set to an invalid directory: /usr/lib/jvm/default-java
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.
但是,当我检查JAVA_HOME变量时,我得到:
# echo $JAVA_HOME
/usr/lib/jvm/java-7-oracle
我的JAVA_HOME是在.bashrc中定义的,我已经仔细检查过它是否被设置为源。
运行java -version
也确认JAVA_HOME设置正确且位于PATH上。
# java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
我还检查了/usr/bin/java
符号链接到/etc/alternatives/java
,后者又正确地符号链接到/usr/lib/jvm/java-7-oracle/jre/bin/java
此外,我已检查.bash_profile
或/etc/profile
中没有重复的JAVA_HOME定义。
所以我的问题是Gradle如何/为什么找到/usr/lib/jvm/default-java
,更重要的是我如何将其指向正确的目录?
其他需要JDK工作正常的程序,所以我认为它是Gradle问题。我也尝试重新安装Gradle,没有任何区别。
我正在运行64位Xubuntu(Ubuntu 13.10基础)
答案 0 :(得分:252)
事实证明,我从Ubuntu 13.10存储库本身下载的特定Gradle二进制文件尝试导出JAVA_HOME。感谢Lucas建议。
/usr/bin/gradle
第70行:
export JAVA_HOME=/usr/lib/jvm/default-java
注释掉这一行解决了这个问题,Gradle找到了Java二进制文件的正确路径。
如果您只是从website下载二进制文件,它就没有这个问题, 这是Ubuntu repo版本的问题。 There also seem to be some other issues with 13.10 version.
答案 1 :(得分:46)
添加符号链接
sudo ln -s /usr/lib/jvm/java-7-oracle /usr/lib/jvm/default-java
答案 2 :(得分:15)
解决方案是让JAVA_HOME == dir位于bin上javac所在的位置
type javac
javac is /usr/bin/javac # now check if its just a symlink
ls -la /usr/bin/javac
/usr/bin/javac -> /etc/alternatives/javac # its a symlink so check again
ls -la /etc/alternatives/javac # now check if its just a symlink
/etc/alternatives/javac -> /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
好的,所以终于在实际的javac上面找到了bin,所以这样做
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
上面的可以简化并推广到
which javac >/dev/null 2>&1 || die "ERROR: no 'javac' command could be found in your PATH"
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac) )))
答案 3 :(得分:13)
对我来说,此错误是由于 Gradle 安装为 sudo 的原因,我尝试作为默认用户运行Gradle。
尝试:
sudo gradle -version
或
sudo gradle -v
答案 4 :(得分:7)
尝试安装最新版本的gradle
,
sudo add-apt-repository ppa:cwchien/gradle
sudo apt-get update
sudo apt-get install gradle
如果我们从ubuntu repo安装,它将安装旧版本,(对我而言,它是gradle 1.4)。在旧版本中,它将gradle中的java home设置为export JAVA_HOME=/usr/lib/jvm/default-java
。最新版本没有这个问题。
答案 5 :(得分:4)
我遇到了同样的问题,但我没有在最新版本2.13的gradle文件中的第70行找到导出命令,但我理解那里有一个愚蠢的错误,即关注,
如果在gradle文件夹/ bin /的gradle文件中找不到带有导出命令的第70行,请检查〜/ .bashrc,如果找到export JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64/bin/java
,则从中移除/bin/java
这一行,如JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64
,路径>>>而不是export PATH=$PATH:$HOME/bin:JAVA_HOME/
,而是export PATH=$PATH:$HOME/bin:JAVA_HOME/bin/java
。然后运行source ~/.bashrc
。
原因是,如果您检查您的gradle文件,您将在第70行(如果没有导出命令)或第75行找到
JAVACMD="$JAVA_HOME/bin/java" fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
这意味着
/bin/java
已经存在,因此需要从JAVA_HOME
路径中减去。
发生在我的案子中。
答案 6 :(得分:4)
你export
JAVA_HOME
了吗?如果不导出,该设置将不会传播到该shell内部启动的命令。此外,java -version
不使用JAVA_HOME
,而是使用您路径中找到的第一个java
。确保您的.bashrc
看起来像这样:
JAVA_HOME=/path/to/java/home
export JAVA_HOME
答案 7 :(得分:3)
当我在Ubuntu上运行以下命令时,我遇到了这个问题:
ionic build android
要解决此问题,我执行了以下步骤:
ln -sf /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java /usr/lib/jvm/default-java
将JAVA_HOME添加到/ etc / environment:
vi /etc/environment
添加:
JAVA_HOME="/usr/lib/jvm/default-java"
保存后,请阅读:
source /etc/environment
最后,您可以运行build命令。
答案 8 :(得分:2)
sudo ln -s /usr/lib/jvm/java-7-oracle/jre /usr/lib/jvm/default-java
创建指向default-java目录的符号链接。
您可以通过
找到您的java目录readlink -f $(which java)
# outputs: /usr/lib/jvm/java-7-oracle/jre/bin/java
# Remove the last `/bin/java` and use it in above symbolic link command.
答案 9 :(得分:2)
您也可以转到gradle安装文件夹中的bin文件夹,并更正gradle.bat文件中的JAVA_HOME参数。 就我而言,我的JAVA_HOME设置为c:\ Program files \ java \ bin gradle.bat中的JAVA_HOME设置为%JAVA_HOME%\ bin \ java.exe。
我更正了gradle.bat中的JAVA_HOME并且它有效。
谢谢!!!
答案 10 :(得分:2)
对我来说,Eclipse中外部工具配置的arguments部分的显式设置就是问题。
答案 11 :(得分:1)
我也有这个问题。它说错误的目录是正确的。所以我刚刚创建了一个名为JAVA_HOME的局部变量,省略了final / bin / java。它对我来说很好。
答案 12 :(得分:1)
我已经在Manjaro Linux上进行了测试。应该也可以在其他Disto上使用。
对于Java env var,您需要包括整个java-jdk目录,而不仅仅是java / bin。
例如,代替:
export JAVA_HOME=/opt/jdk-14.0.2/bin
#根据您的jdk位置更改路径
PATH=$PATH:$JAVA_HOME
使用此:
export JAVA_HOME=/opt/jdk-14.0.2/
#根据您的jdk位置更改路径
PATH=$PATH:$JAVA_HOME
然后运行gradle命令,它将起作用。
答案 13 :(得分:0)
在我的dockercontainer中(最小的是没有找到java的问题)是,"其中"没安装。使用在./gradlew中使用的gradlew来编译项目来查找java 安装解决了这个问题。
答案 14 :(得分:0)
如果正确设置了GRADLE_HOME和JAVA_HOME环境,请检查您的JDK目录,并确保在以下路径下具有 java.exe 文件。
C:\Program Files (x86)\Java\jdk1.8.0_181\bin
在gradle.bat文件中提到的错误
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
它无法找到您的Java安装。因此找到并设置
java.exe
在%JAVA_HOME%/bin
下,如果一切正确。
这对我有用(我的帐户被客户端禁用,他们的管理员已从我的目录中删除了java.exe。)
答案 15 :(得分:0)
[Windows]如前所述,.bat -file似乎试图从%JAVA_HOME%/bin/java.exe
中查找java.exe,因此找不到它,因为bin
在路径中重复了两次。
从gradle.bat中删除多余的/bin
。
答案 16 :(得分:0)
在运行命令之前,请尝试输入:
def manage_authors(request):
AuthorFormSet = modelformset_factory(Produkt, fields=('nazwa','ilosc','minimum',),extra=0)
if request.method == 'POST':
formset = AuthorFormSet(request.POST or None, request.FILES or None)
if formset.is_valid():
formset.save()
else:
formset = AuthorFormSet()
return render(request, 'manage_authors.html', {'formset': formset})
export JAVA_HOME="path_to_java_home"
是path_to_java_home
所在的文件夹。
如果正确安装了Java,则可以使用以下命令找到其位置:
bin/java
在将readlink -f $(which java)
放入bin/java
的过程中,别忘了从路径末尾删除JAVA_HOME
答案 17 :(得分:0)
在我的Ubuntu中,我在此问题上头痛了2天。
步骤1.在终端whereis java
上输入
然后它将显示类似这样的内容
java: /usr/bin/java /etc/java /usr/share/java /usr/lib/jvm/java-8-openjdk-amd64/bin/java /usr/share/man/man1/java.1.gz
步骤2。记下路径:
/usr/lib/jvm/java-8-openjdk-amd64/bin/java
排除bin/java
您的JAVA_HOME = /usr/lib/jvm/java-8-openjdk-amd64
答案 18 :(得分:0)
在build.gradle中添加以下行解决了我的问题。
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8