Ошибка gcj - не удается найти файл для класса java.util.function.Predicate - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть код 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

Я не получаю эти ошибки в других моих кодах, которые включают в себя некоторые другие внешние банки, кроме гуавы!

1 Ответ

0 голосов
/ 30 апреля 2018

Я предполагаю, что вы говорите о компиляторе GCJ Java, который был частью набора компиляторов GCC.

Боюсь, что GCJ полагался на библиотеки GNU Classpath , и эти библиотеки не достигли полного охвата библиотек классов Java 5. Разработка Classpath остановилась после Sun с открытым исходным кодом Java 6.

Код, который вы пытаетесь скомпилировать, зависит от API Java 8. Они никогда не были реализованы в Classpath. Это является основной причиной ошибок компиляции, которые вы получаете.

Набор инструментов GCJ теперь фактически мертв. Как говорит страница Википедии :

По состоянию на 2015 год от GCJ не было объявлено о новых разработках, и продукт находился в режиме обслуживания. GCJ был удален из ствола GCC 30 сентября 2016 года. Объявление о его удалении было сделано с выпуском GCC 7.1, который не содержит его. GCJ остается частью GCC 6.

Если вы ищете надежный компилятор Java AOT (раньше времени), подумайте:

...