J'ai eu un travail pour modifier une application créée en Java 8 pour qu'elle s'exécute sous Java 6, donc je pense que c'est inhabituel, alors je vais le résumer. Je ne pense pas que je fais ça d'habitude ... (Et je ne voulais pas faire ce genre de travail)
J'ai une application Restful Java 8 que j'utilisais dans un autre projet Lorsque j'ai essayé d'appliquer l'application à mon projet Le serveur sur lequel l'application est placée s'appelle Red Hat Enterprise Linux 5.1 ...
Je voulais que vous mettiez à niveau le système d'exploitation du serveur sur lequel vous souhaitez le déployer, mais ce n'est pas raisonnable car d'autres applications sont en cours d'exécution ...
C'est pourquoi j'ai décidé de passer de Java8 à Java6.
Incidemment, selon Wiki, Red Hat Enterprise Linux 5.1 a 10 ans, publié le 7 novembre 2007. La date limite de support standard est le 31 mars 2017 et la date limite de support standard est déjà expirée. Le support étendu est jusqu'au 30 novembre 2020 ...
Voici quelques fonctionnalités typiques ajoutées dans Java 8.
En plus de cela, de nombreuses fonctions ont été ajoutées. Voir Notes de version pour plus de détails.
Comme vous pouvez le voir, il y a eu de nombreux changements dans l'API et la méthode de description dans Java 8, et les changements étaient très importants pour Java.
Java backporting tools Java backporting tools est un programme permettant de convertir des fichiers de classe Java d'une version à une version plus ancienne. Les deux suivants ont été utilisés cette fois.
Retrolambda
Retro Lambda est un plugin Maven, Gradle
Il convertit la description Java 8 en une version inférieure lors de la construction.
En regardant le fichier de classe construit, en dehors de XXX.class
, un fichier de classe tel que XXX $$ Lambda $ 9.class
est affiché,
On peut voir que les descriptions Java 8 telles que les expressions Lambda sont traitées comme des fichiers de classe séparés.
Les éléments suivants sont pris en charge par Retrolambda.
Presque toutes les nouvelles descriptions sont prises en charge.
Ici, je vais vous expliquer comment l'utiliser dans Maven. Pour Gradle, voir Lisez-moi ici.
Décrivez comme suit dans pom.xml.
<plugin>
<groupId>net.orfjackal.retrolambda</groupId>
<artifactId>retrolambda-maven-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<goals>
<goal>process-main</goal>
<goal>process-test</goal>
</goals>
</execution>
</executions>
<configuration>
<target>1.6</target>
</configuration>
</plugin>
Maintenant, il sera construit automatiquement sur le cycle de vie mvn.
configuration.target
décrit la version Java convertie.
Lors du développement (paramètres tels que IDE), développer à l'aide du SDK Java8, Java 6 est utilisé pour exécuter le Jar construit.
Le problème avec cette méthode est qu'elle peut être compilée même si vous utilisez l'API Java 8 (bien sûr, vous obtiendrez une erreur à l'exécution), Il semble y avoir un plug qui en avertit. (Je ne l'ai pas utilisé)
streamsupport couvre de nombreuses nouvelles API Java 8. Ceux couverts sont les suivants.
pom.xml
Ajoutez ce qui suit aux dépendances dans pom.xml.
(Streamsupport.version est défini dans properties
.)
<!-- To use Java8 stream,functional API in Java6 -->
<dependency>
<groupId>net.sourceforge.streamsupport</groupId>
<artifactId>streamsupport</artifactId>
<version>${streamsupport.version}</version>
</dependency>
<dependency>
<groupId>net.sourceforge.streamsupport</groupId>
<artifactId>streamsupport-cfuture</artifactId>
<version>${streamsupport.version}</version>
</dependency>
<dependency>
<groupId>net.sourceforge.streamsupport</groupId>
<artifactId>streamsupport-flow</artifactId>
<version>${streamsupport.version}</version>
</dependency>
<dependency>
<groupId>net.sourceforge.streamsupport</groupId>
<artifactId>streamsupport-atomic</artifactId>
<version>${streamsupport.version}</version>
</dependency>
<dependency>
<groupId>net.sourceforge.streamsupport</groupId>
<artifactId>streamsupport-literal</artifactId>
<version>${streamsupport.version}</version>
</dependency>
Fondamentalement, il peut être appelé avec le même nom de classe et le même nom de méthode avec un nom de package différent de l'API java8.
Par exemple, l'API Completable Future
import java.util.concurrent.CompletableFuture;
↓
import java8.util.concurrent.CompletableFuture;
devenir de cette façon.
Vous pouvez créer une instance de flux avec RefStreams.of
.
import java8.util.stream.RefStreams;
RefStreams.of("a", "b", "c")
.map(String::toUpperCase)
.forEach(System.out::println);
Dans Java 8, la méthode stream est ajoutée à la classe List comme suit. Dans ce cas, c'est comme suit.
import java.util.Arrays;
import java.util.List;
List<String> list = Arrays.asList("a", "b", "c");
list.stream()
.map(String::toUpperCase)
.forEach(System.out::println);
↓
import java.util.Arrays;
import java.util.List;
import java8.util.stream.StreamSupport;
List<String> list = Arrays.asList("a", "b", "c");
StreamSupport.stream(list)
.map(String::toUpperCase)
.forEach(System.out::println);
J'espère que les lecteurs n'auront pas la possibilité de rétrograder les applications Java 8 vers Java 6. .. ..
Recommended Posts