我有一个相当复杂的 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
Run Code Online (Sandbox Code Playgroud)
$ 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)
Run Code Online (Sandbox Code Playgroud)
使用 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
Run Code Online (Sandbox Code Playgroud)
即使我println(org.gradle.internal.jvm.Jvm.current())它打印 Java 8。
我想到了!问题是这javac -version是错误的,它指向 Java 11 而不是 8,尽管事实上 myjava -version和ehco $JAVA_HOME都指向 Java 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
Run Code Online (Sandbox Code Playgroud)
于是我就想到去检查一下javac -version,果然,我发现了javac 11.0.4。原因是我上次将Java 从 8 更改为 11 时也update-alternatives --config java忘记了。update-alternatives --config javac
| 归档时间: |
|
| 查看次数: |
7800 次 |
| 最近记录: |