2012-08-31 9 views
5

Rozważałem, czy projekt java może wytworzyć 2 słoiki: jeden dla java7 i jeden dla java6, tak, kod źródłowy może korzystać z niektórych nowych funkcji java7.Czy możemy użyć javaca jdk7 do kompilacji kodu z funkcjami java7 do jav6 bytecode

tak aby wygenerować słoik java6, linia poleceń byłoby jak:

javac -target 1.6 -bootclasspath jdk1.6.0\lib\rt.jar -extdirs "" MyApp.java 

Niestety To po prostu emituje błąd:

javac: target release 1.6 conflicts with default source release 1.7 

Według this document powinno być możliwe jdk6 vs jdk5, ktoś wie, dlaczego to nie działa w jdk7 vs jdk6? czy zrobiłem coś złego, czy jest to oficjalnie nieobsługiwane?

Dzięki.

+2

[Tutaj znajduje się dokumentacja kompilacji dla Java 7.] (http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#crosscomp-example) 'OldCode. java' powinien zostać zapisany na docelowym poziomie źródłowym. Składnia IIRC, Java 5 i Java 6 są takie same. – McDowell

+0

@McDowell oznacza, że ​​kod źródłowy nie powinien zawierać żadnych nowych funkcji java7, prawda? –

+0

Prawidłowo. Jeśli szukasz docelowej wersji Java 6 z kodem Java 7, prawdopodobnie będziesz potrzebować specjalistycznego narzędzia innej firmy. – McDowell

Odpowiedz

5

AFAIK, źródło i cel muszą być takie same. Nawet w Javie 6. Jedynym wyjątkiem jest źródło 1.1 i cel 1.0.

Biorąc pod uwagę niewielką różnicę w JVM między najnowszą wersją JVM dla Java 6 i Java 7, sugeruję rozważenie aktualizacji. Również Java 6 będzie, End Of (bezpłatna) usługa w listopadzie 2012 r., Która za trzy miesiące od teraz ...

+1

zgadzam się. uaktualnienie lub obniżenie wersji. Kompilacja krzyżowa to dużo bólu. – Thilo

+1

@PeterLawrey "Nov 2010, czyli za trzy miesiące." Czy cofnęliśmy się w czasie? i dlaczego utknąłem w 2012 roku? :) Przepraszam, nie mogłem się powstrzymać. – JTMon

+0

@JTMon Właśnie wróciłem! Oczywiście nie w Chinach, ponieważ jest tam nielegalna. ;) –

2

Nawet jeśli było to możliwe, to ogólnie zły pomysł - jeśli chcesz mieć pewność, że twój kod będzie działał na java 6 to musisz go zbudować na java 6. Każda nowa wersja java wprowadza nowe klasy do biblioteki klas i dodaje nowe metody do istniejących klas, a nawet jeśli ustawisz kompilator java 7 na generowanie kodu zgodnego z 6 kodami, który wygrał "łapaj przypadki, w których nazywasz metodę 7-jedyną.

+0

* "nie będzie przechwytywać przypadków, w których wywołasz metodę 7-only". * Z pewnością będzie, jeśli użyjesz poprawnie opcji 'bootclasspath'. –

+1

To prawda, ale jeśli masz do dyspozycji instalację Java 6, więc możesz umieścić jej biblioteki klas w bootclasspath Java 7, to dlaczego nie po prostu zachować prostotę i skompilować używając tej Java 6 w pierwszej kolejności ... –

+1

* "Java 6 instalacja "* Przez instalację rozumiesz JDK. Bootclasspath może pracować z 'rt.jar' dla wcześniej zainstalowanego ** JRE ** lub, co ważniejsze,' rt.jar' wcześniejszej wersji, bez 'instalacji' potrzebnej. Jeśli kompilujesz kod 1.7 i 1.6, a także jakiś kod dla starszych urządzeń, które uruchamiają 1.3, jest o wiele prostsze radzenie sobie z grupą sagów wykonawczych niż grupa zainstalowanych JDK (z grupą 'java. wartości domu i ..). –

Powiązane problemy