To nie jest błąd (jak myślałem). Projekt rzeczywiście korzysta z klas z Java 8. Nie kompiluje się z Javą 7, a jego kompilacja Mavena nie działa z Javą 7.
Jednakże, jak Java 8-specyficzne funkcje, takie jak lambda są wykorzystywane nigdzie w kodzie źródłowym, to działa z Java 7.
Spróbuj utworzyć Java 7 projektu, deklarując HikariCP jako zależność, a bieganie następujący kod:
import com.zaxxer.hikari.util.FastList;
public class Main {
public static void main(String[] args) {
FastList<String> fastList = new FastList<>(String.class);
fastList.add("Hello");
System.out.println(fastList);
}
}
Działa poprawnie. Z drugiej strony, poniższy kod nie powiedzie się:
fastList.removeIf(null);
To dlatego removeIf()
i niektóre inne sposoby korzystania z klas Javy 8, a zatem nie można uruchomić z Java 7. Ale wszyscy rzucają UnsupportedOperationException
zresztą! Możesz zauważyć, że jedyną klasą do importowania klas Java 8 jest com.zaxxer.hikari.util.FastList
. Nie jestem pewien, dlaczego to zrobili.
UPDATE: Chciałem tylko wyjaśnić, że wersja kodu bajtowego projektodawcy wynosi 1,7, co można łatwo zweryfikować z dekompilator lub heksowego. Jego kod źródłowy jest zgodny z Java 7 i dlatego może być zbudowany z
<source>1.7</source>
<target>1.7</target>
jak wskazał @Puce.
Z drugiej strony, musi być skompilowane z JDK 1.8, tak że Java 8 klas użyte w kodzie źródłowym są dostępne podczas kompilacji. Po skompilowaniu kodu można go uruchomić z językiem Java 7, o ile nie zostaną wykonane żadne próby załadowania brakującej klasy Java 8 (w tym przypadku z pakietu java.util.function
).
Może być starym komentarzem. –
Nie można tego zrobić bez zachowania dwóch wersji kodu http://stackoverflow.com/questions/16143684/can-java-8-code-be-compiled-to-run-on-java-7-jvm – vempo
Link do projektu, abyśmy mogli odpowiedzieć na twoje pytanie. Jeśli deklaruje, że zarówno artefakty Java 7, jak i Java 8 są obsługiwane, ciężko powiedzieć, jak to osiągnąć, nie widząc rzeczywistego projektu. Wierzę, że mają dwa ** różnych artefaktów, jeden dla Java 7 i drugi dla Javy 8. – vempo