java - gcj 错误 - 找不到类 java.util.function.Predicate 的文件

标签 java compiler-errors guava machine-code gcj

我有一个java代码,我必须使用guava23.0.jar作为外部库。 更具体地说,我需要导入这些内容:

import com.google.common.base.Charsets;
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnel;
import com.google.common.hash.PrimitiveSink;

我构建了代码的 jar 文件,现在,我尝试使用 gcj 生成机器代码。 我测试了 jar 文件,它工作得很好并给了我输出。 但是,当尝试使用 gcj 编译和生成机器代码时,它给了我几个错误:

com/google/common/base/Predicate.java:0:0: error: cannot find file for class java.util.function.Predicate
com/google/common/base/Predicate.java: At top level:
com/google/common/base/Predicate.java:0:0: error: cannot find file for class java.util.function.Predicate
com/google/common/base/Predicate.java:0:0: error: cannot find file for class java.util.function.Predicate
com/google/common/base/Supplier.java: In class 'com.google.common.base.Absent':
com/google/common/base/Supplier.java: In method 'com.google.common.base.Absent.or(com.google.common.base.Supplier)':
In file included from com/google/common/base/Absent.java:60:0,
                 from com/google/common/annotations/VisibleForTesting.java:2,
                 from com/google/common/annotations/GwtIncompatible.java:1,
                 from com/google/common/annotations/GwtCompatible.java:1,
                 from com/google/common/annotations/Beta.java:1,
                 from bloomfilter/MultipleBloomFilterCheck.java:41,
                 from bloomfilter/MultipleBloomFilterCheck.java:100,
                 from bloomfilter/Main.java:25,
                 from <built-in>:3:
com/google/common/base/Supplier.java:0:0: error: cannot find file for class java.util.function.Supplier
In file included from com/google/common/annotations/VisibleForTesting.java:2:0,
                 from com/google/common/annotations/GwtIncompatible.java:1,
                 from com/google/common/annotations/GwtCompatible.java:1,
                 from com/google/common/annotations/Beta.java:1,
                 from bloomfilter/MultipleBloomFilterCheck.java:41,
                 from bloomfilter/MultipleBloomFilterCheck.java:100,
                 from bloomfilter/Main.java:25,
                 from <built-in>:3:
com/google/common/base/Absent.java:60:0: error: cannot find file for class java.util.function.Supplier
com/google/common/base/Absent.java:60:0: error: cannot find file for class java.util.function.Supplier
com/google/common/base/Absent.java:60:0: error: cannot find file for class java.util.function.Supplier
com/google/common/base/Function.java: At top level:
In file included from com/google/common/base/Ascii.java:636:0,
                 from com/google/common/base/AbstractIterator.java:89,
                 from com/google/common/base/AbstractIterator.java:35,
                 from com/google/common/base/AbstractIterator.java:60,
                 from com/google/common/base/Absent.java:27,
                 from com/google/common/annotations/VisibleForTesting.java:2,
                 from com/google/common/annotations/GwtIncompatible.java:1,
                 from com/google/common/annotations/GwtCompatible.java:1,
                 from com/google/common/annotations/Beta.java:1,
                 from bloomfilter/MultipleBloomFilterCheck.java:41,
                 from bloomfilter/MultipleBloomFilterCheck.java:100,
                 from bloomfilter/Main.java:25,
                 from <built-in>:3:
com/google/common/base/Function.java:0:0: error: cannot find file for class java.util.function.Function
In file included from com/google/common/base/Ascii.java:634:0,
                 from com/google/common/base/AbstractIterator.java:89,
                 from com/google/common/base/AbstractIterator.java:35,
                 from com/google/common/base/AbstractIterator.java:60,
                 from com/google/common/base/Absent.java:27,
                 from com/google/common/annotations/VisibleForTesting.java:2,
                 from com/google/common/annotations/GwtIncompatible.java:1,
                 from com/google/common/annotations/GwtCompatible.java:1,
                 from com/google/common/annotations/Beta.java:1,
                 from bloomfilter/MultipleBloomFilterCheck.java:41,
                 from bloomfilter/MultipleBloomFilterCheck.java:100,
                 from bloomfilter/Main.java:25,
                 from <built-in>:3:
com/google/common/base/CaseFormat.java:0:0: error: cannot find file for class java.util.function.Function
com/google/common/base/CaseFormat.java:0:0: error: cannot find file for class java.util.function.Function
com/google/common/base/CaseFormat.java:0:0: error: cannot find file for class java.util.function.Function
com/google/common/base/CaseFormat.java:0:0: error: cannot find file for class java.util.function.Function
com/google/common/base/CaseFormat.java:0:0: error: cannot find file for class java.util.function.Function
com/google/common/base/CaseFormat.java:0:0: error: cannot find file for class java.util.function.Function
In file included from com/google/common/base/Ascii.java:640:0,
                 from com/google/common/base/AbstractIterator.java:89,
                 from com/google/common/base/AbstractIterator.java:35,
                 from com/google/common/base/AbstractIterator.java:60,
                 from com/google/common/base/Absent.java:27,
                 from com/google/common/annotations/VisibleForTesting.java:2,
                 from com/google/common/annotations/GwtIncompatible.java:1,
                 from com/google/common/annotations/GwtCompatible.java:1,
                 from com/google/common/annotations/Beta.java:1,
                 from bloomfilter/MultipleBloomFilterCheck.java:41,
                 from bloomfilter/MultipleBloomFilterCheck.java:100,
                 from bloomfilter/Main.java:25,
                 from <built-in>:3:
com/google/common/base/Converter.java:0:0: error: cannot find file for class java.util.function.Function
com/google/common/base/Converter.java:0:0: error: cannot find file for class java.util.function.Function
com/google/common/base/CaseFormat.java: In class 'com.google.common.base.CaseFormat':
com/google/common/base/CaseFormat.java: In method 'com.google.common.base.CaseFormat.convert(com.google.common.base.CaseFormat,java.lang.String)':
In file included from com/google/common/base/CaseFormat.java:155:0,
                 from com/google/common/base/CaseFormat.java:101,
                 from com/google/common/base/CaseFormat.java:82,
                 from com/google/common/base/CaseFormat.java:74,
                 from com/google/common/base/CaseFormat.java:66,
                 from com/google/common/base/CaseFormat.java:47,
                 from com/google/common/base/Ascii.java:641,
                 from com/google/common/base/AbstractIterator.java:89,
                 from com/google/common/base/AbstractIterator.java:35,
                 from com/google/common/base/AbstractIterator.java:60,
                 from com/google/common/base/Absent.java:27,
                 from com/google/common/annotations/VisibleForTesting.java:2,
                 from com/google/common/annotations/GwtIncompatible.java:1,
                 from com/google/common/annotations/GwtCompatible.java:1,
                 from com/google/common/annotations/Beta.java:1,
                 from bloomfilter/MultipleBloomFilterCheck.java:41,
                 from bloomfilter/MultipleBloomFilterCheck.java:100,
                 from bloomfilter/Main.java:25,
                 from <built-in>:3:
com/google/common/base/CaseFormat.java:130:0: error: cannot find file for class java.util.function.Predicate
com/google/common/base/CaseFormat.java:130:0: error: cannot find file for class java.util.function.Predicate
com/google/common/base/CharMatcher.java: In class 'com.google.common.base.CharMatcher$And':
com/google/common/base/CharMatcher.java: In method 'negate()':
In file included from com/google/common/base/CharMatcher.java:616:0,
                 from com/google/common/base/CaseFormat.java:30,
                 from com/google/common/base/CaseFormat.java:155,
                 from com/google/common/base/CaseFormat.java:101,
                 from com/google/common/base/CaseFormat.java:82,
                 from com/google/common/base/CaseFormat.java:74,
                 from com/google/common/base/CaseFormat.java:66,
                 from com/google/common/base/CaseFormat.java:47,
                 from com/google/common/base/Ascii.java:641,
                 from com/google/common/base/AbstractIterator.java:89,
                 from com/google/common/base/AbstractIterator.java:35,
                 from com/google/common/base/AbstractIterator.java:60,
                 from com/google/common/base/Absent.java:27,
                 from com/google/common/annotations/VisibleForTesting.java:2,
                 from com/google/common/annotations/GwtIncompatible.java:1,
                 from com/google/common/annotations/GwtCompatible.java:1,
                 from com/google/common/annotations/Beta.java:1,
                 from bloomfilter/MultipleBloomFilterCheck.java:41,
                 from bloomfilter/MultipleBloomFilterCheck.java:100,
                 from bloomfilter/Main.java:25,
                 from <built-in>:3:
com/google/common/base/CharMatcher.java:1719:0: error: cannot find file for class java.util.function.Predicate
com/google/common/base/CharMatcher.java:1719: confused by earlier errors, bailing out

我在包含 Guava 以外的其他外部 jar 的其他代码中没有收到这些错误!

最佳答案

我假设您正在谈论 GCJ Java 编译器,它是 GCC 编译器套件的一部分。

恐怕 GCJ 依赖 GNU Classpath库,并且这些库没有实现对 Java 5 类库的完全覆盖。 Sun 开源 Java 6 后,类路径开发工作陷入停滞。

您尝试编译的代码取决于 Java 8 API。它们从未在类路径中实现。这是您遇到编译错误的根本原因。

GCJ 工具链现在实际上已经死亡。作为Wikipedia page说:

As of 2015, there were no new developments announced from GCJ and the product was in maintenance mode. GCJ was removed from the GCC trunk on September 30, 2016. Announcement of its removal was made with the release of the GCC 7.1, which does not contain it. GCJ remains part of GCC 6.

如果您正在寻找可行的 Java AOT(提前)编译器,请考虑:

关于java - gcj 错误 - 找不到类 java.util.function.Predicate 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50101655/

相关文章:

python - 将 Clang 设置为 Windows 上 pip install 中使用的默认编译器

excel - Mac的最新Excel不再编译

java - Guava的MediaType可以用在HTTP响应头Content-Type中吗?

java - 使用 JDK 11 HttpClient 进行代理身份验证

gcc - 奇怪的编译错误

guava - 缓存和计算图

java - 使用 Jackson 序列化 ImmutableMap 时如何保留类型信息?

java - 如何在Android键盘上显示换行按钮?

java - jOOQ 可以为 Oracle 同义词生成代码吗?

java - 匹配 XText 中的字符串,无论大小写