我有一个相当复杂的gradle设置(一个父项目和许多子项目)。子项目之一失败,出现以下错误:
package javax.xml.bind.annotation does not exist
我正在使用包含此软件包的Oracle Java 8(已在Java 11中将其删除)。我确实安装了Java 11,但是它不是我的活动Java版本。这是唯一一个失败并出现这些错误的子项目,而我确实有其他子项目引用了相同的包并成功构建。
从理论上讲,它对Java版本并不感到困惑。
$ echo $JAVA_HOME
/usr/lib/jvm/java-8-u221-oracle
$ java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
使用gradle包装器:
$ ./gradlew -v
------------------------------------------------------------
Gradle 5.6.4
------------------------------------------------------------
Build time: 2019-11-01 20:42:00 UTC
Revision: dd870424f9bd8e195d614dc14bb140f43c22da98
Kotlin: 1.3.41
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.14 compiled on March 12 2019
JVM: 1.8.0_221 (Oracle Corporation 25.221-b11)
OS: Linux 5.0.0-36-generic amd64
即使我println(org.gradle.internal.jvm.Jvm.current())
也会打印Java 8。
答案 0 :(得分:1)
我知道了!问题是javac -version
是错误的,尽管我的java -version
和ehco $JAVA_HOME
都指向Java 8,但它指向的却是Java 11,而不是8。
我使用--info
选项运行gradle任务,并仔细阅读了输出。我发现快要结束了:
Compiling with Java command line compiler 'javac'.
Starting process 'command 'javac''. Working directory: /path/to/project Command: javac @/path/to/project/build/tmp/compileJava/java-compiler-args.txt
Successfully started process 'command 'javac''
:project:compileJava (Thread[Execution worker for ':',5,main]) completed. Took 2.035 secs.
2 actionable tasks: 2 executed
因此,我想到要检查javac -version
,并且确定地找到了javac 11.0.4
。原因是上次我使用update-alternatives --config java
将Java从8更改为11时,也忘记了update-alternatives --config javac
。