2016-03-21 15 views
2

üzerinde çalışan yüksek sürüm API'leri kullanmaktan kaçınarak yavaş yavaş bir proje işyerinden Java 7 ile 8 arasında geçiriyorum.Java: yüksek bir sürüm JDK kullanarak derleme ancak JRE

Ben 2 adımda bunu yapmak istiyorum - o zaman inşa makineleri ve çalışma zamanı makinesi göç ​​ederler.

ANCAK derleyici args source=7 ve target=7 olarak ayarlanmış olsa bile

, streams and Optional gibi, JAVA 8 API'leri kullanırken, derleme hala başarılı geçtiği gibi görünüyor. Açıktır ki, bir Java 7 makinesinde çalıştırılacağı zaman kodunu ClassNotFoundException koparacaktır.

Bu çok şaşırtıcıdır. Doğru şekilde belirtilen düşük sürüm JRE üzerinde çalışırken yüksek sürüm API'leri kullanmaya karşı nasıl koruyabilirim?

cevap

3

Bir yolu, bootclasspath özelliğini kullanarak bulundu.

Yapı makinesinde, bir Java 8 derleyicisi tarafından yapılan bir hesaplama olsa da, bir Java 7 rt.jar sağlayan -bootclasspath param belirtiyorum.

Örnek (çiğ):

javac <all-other-params> -bootclasspath /usr/alik/jdk1.7.0_21-rt.jar 

Maven örnek:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
    <configuration> 
     <source>7</source> 
     <target>7</target> 
     <compilerArguments> 
      <bootclasspath>/usr/alik/jdk1.7.0_21-rt.jar</bootclasspath> 
     </compilerArguments> 
    </configuration> 
</plugin> 

bir geliştirici Optional gibi bir Java 8 API kullanmaya çalışıyor, derleme nihayet hata ile başarısız: cannot find symbol class Optional .

+0

Gerçekten birilerinin daha iyi bir çözüme sahip olduğunu umuyorum ... –

+0

[İlgili soru] 'na bakın (http://stackoverflow.com/questions/40087200/can-i-compile-java-for-an-older-java- sürüm ile-ant-ile-yeni-JDK çok da bu-gen). [Hayvan Sniffer] gibi bir maven eklentisi dışında (http://www.mojohaus.org/animal-sniffer/animal-sniffer-maven-plugin/index.html), '-bootclasspath' seçeneği elinizden gelenin en iyisidir. şimdi al. Ve '-release' seçeneğinin Java 9'a girmesini umuyoruz. – charlie