为什么gradle失败并显示包javax.xml.bind.annotation不存在错误?

时间:2019-11-28 07:55:13

标签: java gradle

我有一个相当复杂的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。

1 个答案:

答案 0 :(得分:1)

我知道了!问题是javac -version是错误的,尽管我的java -versionehco $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