Nie znaleziono klasy javac1.8

80

Zainstalowałem dwa jdk - jdk 1.5 i jdk 1.8. Mam następujący plik konfiguracyjny Ant build.xml:

<target name="compileCustomSrc">
    <javac srcdir="src" destdir="build/classes" source="1.5" target="1.5" >
        <classpath>
            <fileset dir="C:/lib/">
                <include name="*.jar" />
            </fileset>
        </classpath>
    </javac>
</target>

Przed zainstalowaniem jdk1.8 Ant wywołany z Eclipse skompilował wszystkie źródła pomyślnie. Ale teraz mam następujący komunikat o błędzie:

Nie znaleziono klasy: javac1.8

Moje JAVA_HOME i JRE_HOME:

JAVA_HOME = C: \ Program Files (x86) \ Java \ jdk1.5.0_16
JRE_HOME = C: \ Program Files (x86) \ Java \ jre1.5.0_16

i ustaw w Eclipse JRE na 1.5. Czy Java 1.8 ustawia niektóre konfiguracje podczas instalacji?

kamilz
źródło

Odpowiedzi:

173
Nie znaleziono klasy: javac1.8

Wiadomo, że ten błąd występuje z wersjami Apache Ant mniejszymi niż 1.9.0 - które nie są zgodne z Javą 8. Jeśli używasz wersji Ant <1.9.0, powinieneś zaktualizować do wersji 1.9.x.

Oto powiązany raport o błędzie: https://issues.apache.org/bugzilla/show_bug.cgi?id=53347

Przy okazji, jeśli chcesz tylko skompilować z Javą 8, ale nie musisz kompilować żadnej rzeczywistej składni Java 8, możesz przekazać następujący argument do javac jako obejście , które pozwoliłoby ci kontynuować używanie starszej wersji Ant :

-Dbuild.compiler=javac1.7
Kristian Holdhus
źródło
9
Natknąłem się na ten problem i podana flaga ( -Dbuild.compiler=javac1.7) działa również po przekazaniu bezpośrednio do ant.
cincodenada
Odpowiedź Kristiana jest poprawna, moglibyśmy dodać -Dbuild.compiler = javac1.7 podczas generowania konfiguracji ant-launch w eclipse, patrz < bugs.eclipse.org/bugs/show_bug.cgi?id=409358 >
Shiva Achari
5
Znalazłem kod . Sprawdzają, czy używasz Java 1.3 lub starszej. Stary, stary kod sprzed ponad dekady. Z tego powodu Ant psuje się za każdym razem, gdy Oracle wychodzi z nową wersją 1.x. Ant wymaga już wersji 1.4 lub nowszej. Powinni po prostu usunąć ten czek z kodu.
David W.,
3
@ David W - dlaczego do cholery nie dodali wsparcia dla Javy 1.9 i 2.0, więc zmiany będą działać przez następne 6 czy 8 lat. Java 9 wkrótce ukaże się i wszystko znowu się
zepsuje
2
Błąd został naprawiony w 2012 roku dla Ant 1.9.0 Eclipse, ale Ant w Eclipse Kepler (2014!) Nadal jest na 1.8.4, więc ten problem nadal istnieje. Czy jest to ulepszone w Lunie, czy nadal czekamy? (Uważam, że witryna Eclipse jest całkowicie bezużyteczna do jakiegokolwiek właściwego śledzenia zmian i wiedzy, jakie wersje wtyczek trafiły do ​​poszczególnych wydań; czy to gdzieś tam jest?)
Stuart Rossiter
14

W następstwie odpowiedzi Kristiana Holdhusa (oznaczonej jako poprawna) możesz zamiast tego użyć compileratrybutu w zadaniu Ant javac . Ustawienie compiler="modern"powinno być zgodne zarówno wstecz (do 1.3), jak i do przodu.

Pozwala to uniknąć konieczności ustawiania właściwości Java System o nazwie build.compiler. Tylko w przypadku braku jawnego ustawienia compileratrybutu w javaczadaniu, Ant użyje wartości atrybutu build.compilerjako rezerwy.

Chuck Daniels
źródło
Z pewnością poparłem odpowiedź Kristiana Holdusa. Jednak uznałem, że jest to lepsze rozwiązanie w mojej sytuacji. Zmuszając wywołujące do dodania parametru -D, utrudniamy wysyłanie pliku build.xml do użytkowników zewnętrznych. Musimy również dostarczyć dodatkowe instrukcje użytkowania, które zawsze są mniejsze, tym lepsze :)
Rakesh N
działa, pokazuje notatki podczas budowania [javac] warning: C:\Program Files\Java\jre1.8.0_152\lib\rt.jar(java/net/ConnectException.class): major version 52 is newer than 51, the highest major version supported by this compiler. [javac] It is recommended that the compiler be upgraded.itp.
aswzen
7

Miałem ten sam problem. JAVA_HOME i JRE_HOME zostały ustawione poprawnie. Miałem też Ant> 1,9.

To, co zrobiłem, aby to naprawić, to przejść do Eclipse do Window -> Preferences. Rozwiń Ant i wybierz Runtime. Domyślnie należy wybrać zakładkę Classpath, a po prawej stronie znajduje się przycisk „Ant Home”. Kliknij ten przycisk i dwukrotnie sprawdź, czy wskazuje folder Ant.

Mike Kuenzi
źródło
3
JAVA_HOME = C:\Program Files (x86)\Java\jdk1.5.0_16
JRE_HOME = C:\Program Files (x86)\Java\jre1.5.0_16

Twoje JAVA_HOME i JRE_HOME są ustawione na instalację Java 1.5, dlatego pliki binarne 1.8 (jak javac) nie zostały znalezione. Ustaw je na instalację Javy 1.8 i powinno być dobrze.

Toni Toni Chopper
źródło
Ale nie chcę używać jdk1.8. Dlaczego Ant próbuje używać kompilatora 1.8 z tymi ustawieniami?
kamilz
1
Uruchom kompilację Ant za pomocą opcji „Uruchom jako”> „Ant Build ...”, a następnie otwórz kartę „JRE” i wybierz „Runtime JRE”, którego chcesz użyć do uruchomienia skryptu.
Toni Toni Chopper
Zadanie „javac” może generować kod bajtowy dla starszych maszyn wirtualnych. Zobacz atrybut „target” w doco: ant.apache.org/manual/Tasks/javac.html. Java 1.5 nie może generować kodu bajtowego dla późniejszych maszyn wirtualnych.
Mark O'Connor,
2

Wypróbowałem to z Eclise i otrzymałem ten sam błąd Nie znaleziono klasy: javac1.8

Sprawdziłem wersję ANT w moim systemie

> anty -wersja

Apache Ant (TM) w wersji 1.9.6 skompilowany 29 czerwca 2015 r

Kiedy próbowałem uruchomić build.xml z wiersza poleceń, zadziałało. Następnie sprawdziłem, że w Eclipse chodziło o starszą wersję ANT.

Po prostu wyedytowałem ścieżkę ANT HOME w Eclipse i również tutaj działało. :)

Poniżej znajduje się obraz, z którego należy edytować ścieżkę ANT w Eclipse.

  1. Kliknij prawym przyciskiem myszy plik build.xml
  2. Uruchom jako
  3. Zewnętrzne konfiguracje narzędzi
  4. Wybierz kartę ścieżki klas

Teraz zmień stąd ścieżkę ANT Home.

wprowadź opis obrazu tutaj

KulDeep
źródło
Na co zmieniłeś ścieżkę ANT Home?
Igor Ganapolsky
1
Cześć @IgorGanapolsky Wcześniej ścieżka do wersji Ant była dla Anta 1.8, którą zaktualizowałem do najnowszej wersji Ant 1.9, jak pokazano na powyższym obrazku. I zadziałało. Mam nadzieję, że odpowiedziałem na twoje pytanie.
KulDeep
1

Zaktualizuj Ant do wersji 1.9.x jako Java 8 w niekompatybilnej wersji Ant starszej niż 1.9

Neha Priya
źródło
0

Wypróbowałem wszystkie inne rozwiązania, ale żadne nie działało. W końcu znalazłem podejście, które działało dla mnie w Eclipse:

  • Kliknij prawym przyciskiem myszy nazwę zadania Ant, np. „CompileCustomSrc” w antoknie.
  • Wybierać Run As | External Tool Configurations
  • Następnie na JREkarcie wybierz Separate JRE: Java SE7lub cokolwiek nazywa się twoja java 7, a następnie naciśnij, Applya następnie Run.

Twoje zadanie mrówki zostanie wykonane i zbuduje się poprawnie!

Brad Parks
źródło
0

Zaktualizuj Ant do wersji 1.9.x jako Java 8 w niekompatybilnych wersjach Ant mniejszych niż 1.9 lub po komendzie put -Dbuild.compiler = javac1.7, zobacz poniżej:

ant release -Dbuild.compiler = javac1.7

linhadiretalipe
źródło
0

Czasami problem podczas budowania wojny za pośrednictwem ANT jest również związany z brakiem dopasowania wersji Java w plikach build.properties, ponieważ build.XML próbuje użyć wersji Java wspomnianej we właściwości build.compiler

sprawdź, czy właściwość build.compiler jest taka sama, jak zamierzona wersja Java.

SoSufi
źródło
0

Możesz pobrać nowszą wersję eclipse, która zawiera nowszą wersję Ant w katalogu wtyczek. Następnie skopiuj jar Ant do starszego katalogu wtyczek eclipse. Eclipse automatycznie wskaże nowszą wersję Ant. To zadziałało dla starszego Keplera z nowszym Mars2.

techron
źródło
0

Miałem ten sam problem. Udało mi się to rozwiązać w pliku build.xml, ustawiając właściwość.

<property "build.compiler=javac1.7">
Pavan Dittakavi
źródło