java - 即使存在 JDK 也无法找到 javac 编译器

标签 java unix hadoop ant

我正在尝试运行 Apache Hive web 界面,所以我下载了最新版本的 ant (Ant 1.9.4),当我执行命令时生成 hive.war 文件

 ANT_LIB=/opt/ant/lib bin/hive --service hwi

我收到以下错误:

 cp=/tmp/Jetty_0_0_0_0_9999_hive.hwi.0.10.0.war__hwi__ae9cmk/jsp
    cp=null
    work dir=/tmp/Jetty_0_0_0_0_9999_hive.hwi.0.10.0.war__hwi__ae9cmk/jsp
    extension dir=/usr/lib/jvm/jdk1.7.0_65/jre/lib/ext:/usr/java/packages/lib/ext
    srcDir=/tmp/Jetty_0_0_0_0_9999_hive.hwi.0.10.0.war__hwi__ae9cmk/jsp
   compilerTargetVM=1.5
   compilerSourceVM=1.5
    include=org/apache/jsp/index_jsp.java

15/02/23 09:56:59 ERROR compiler.Compiler: Error compiling file: /tmp/Jetty_0_0_0_0_9999_hive.hwi.0.10.0.war__hwi__ae9cmk/jsp//org/apache/jsp/index_jsp.java     [javac] warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds


15/02/23 09:56:59 ERROR mortbay.log: /hwi/
Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "/usr/lib/jvm/jdk1.7.0_65/jre"
    at org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:130)
    at org.apache.tools.ant.taskdefs.Javac.findSupportedFileExtensions(Javac.java:984)
    at org.apache.tools.ant.taskdefs.Javac.scanDir(Javac.java:961)
    at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:932)
    at org.apache.jasper.compiler.AntCompiler.generateClass(AntCompiler.java:220)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)

我正在以 root 身份执行该代码。我的 JAVA_HOME 已在 .bashrc 中正确设置:

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_65
export HADOOP_LIBEXEC_DIR=/usr/lib/hadoop/libexec
export HADOOP_CONF_DIR=/etc/hadoop/conf

export PATH=$PATH:$JAVA_HOME/bin

.bash_profile 文件:

.bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_65
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

export PATH

我想知道为什么 Ant"/usr/lib/jvm/jdk1.7.0_65/jre" 引用 javac .此外,这是我的 JDK 结构:

[root@ip-10-32-205-19 ~]# cd $JAVA_HOME
[root@ip-10-32-205-19 jdk1.7.0_65]# ls -l
total 19760
drwxr-xr-x. 2 root root     4096 Feb 23 04:09 bin
-r--r--r--. 1 root root     3339 Jun 17  2014 COPYRIGHT
drwxr-xr-x. 4 root root     4096 Jun 17  2014 db
drwxr-xr-x. 3 root root     4096 Jun 17  2014 include
drwxr-xr-x. 5 root root     4096 Jun 17  2014 jre
drwxr-xr-x. 5 root root     4096 Feb 23 04:09 lib
-r--r--r--. 1 root root       40 Jun 17  2014 LICENSE
drwxr-xr-x. 4 root root     4096 Jun 17  2014 man
-r--r--r--. 1 root root      114 Jun 17  2014 README.html
-rw-r--r--. 1 root root      499 Jun 17  2014 release
-rw-r--r--. 1 root root 19902785 Jun 17  2014 src.zip
-rw-r--r--. 1 root root   110114 Jun 16  2014 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r--. 1 root root   173559 Jun 17  2014 THIRDPARTYLICENSEREADME.txt

这表明我安装了 JDK,而不仅仅是安装了 JRE。我也看了类似的问题,但没有一个能解决我的问题。 Java64bits,另外我还为 .bashrc.bash_profilesource.

最佳答案

错误信息是这样的:

Perhaps JAVA_HOME does not point to the JDK. It is currently set to "/usr/lib/jvm/jdk1.7.0_65/jre"

但是,您的 .bashrc 有:

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_65

您可能需要在 Bash shell 中运行 source ~/.bashrc 以将 JAVA_HOME 重置为 JDK 安装的根目录。然后再次运行 Ant。

关于java - 即使存在 JDK 也无法找到 javac 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28676748/

相关文章:

java - Hbase shell 命令抛出错误

hadoop - 我如何在 hadoop 中处理大量小文件?

java - IntelliJ不断切换到UTF8(我想设置CP-1252)

java - Spring ThreadPoolTask​​Executor 的线程计数始终为 1

javascript - 使用 WScript.shell activeX 在 javascript 中执行命令行

linux - awk 变量 : Non Military Format 中的日期操作

java - Jboss eap 5.1 GC JMV 选项

java - 为什么企业应用普遍采用Java+应用服务器实现?

unix - 目录执行和文件读取权限的区别

linux - 如何在 hadoop worker 机器之间同步配置