Bazel编译Java不支持的语法
Comparable<Object>
类实现Comparable
接口,报错示例:
touch WORKSPACE
cat TestMain.java
package com.ts.ap.toolchain.idl.generator.test;
class X implements Comparable<Object> {
@Override
public int compareTo(Object arg0) {
// TODO Auto-generated method stub
return 0;
}
}
public class TestMain {
public static void main(String[] args) {
System.out.println("----------");
}
}
cat BUILD
java_library(
name = 'TestMain',
srcs = ['TestMain.java'],
)
bazel build TestMain
报错:
INFO: Analyzed target //:TestMain (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
ERROR: /root/wl/test/bazel_test/BUILD:1:13: Building libTestMain.jar (1 source file) failed: (Exit 1): java failed: error executing command external/remotejdk11_linux/bin/java -XX:-CompactStrings '--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED' '--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED' ... (remaining 17 arguments skipped)
TestMain.java:3: error: [ComparableType] Type of Comparable (Object) is not the same as implementing class (X).
class X implements Comparable<Object> {
^
(see https://errorprone.info/bugpattern/ComparableType)
Target //:TestMain failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 0.608s, Critical Path: 0.20s
INFO: 2 processes: 2 internal.
FAILED: Build did NOT complete successfully
上面代码直接使用JDK是可以编译通过的。
bazel支持的语法为: class X implements Comparable<X>
package com.ts.ap.toolchain.idl.generator.test;
class X implements Comparable<X> {
@Override
public int compareTo(X arg0) {
// TODO Auto-generated method stub
return 0;
}
}
public class TestMain {
public static void main(String[] args) {
System.out.println("----------");
}
}
如何解决: 未找到方法。
在官方issue中: https://github.com/bazelbuild/bazel/issues/12270
通过--javacopt=
指定参数 -XDcompilePolicy=simple
并没有效果。
bazel build --javacopt=-XDcompilePolicy=simple TestMain