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