Last week some customers asked me this question again:
Which JDK should we use?Oracle JDK seems to have changed its license. Do we need to pay for Java now?
The answer is simple:
Best: Migrate to newer Java versions (see below)
If you are stuck with Java 8: Use the Oracle JDK. Can be downloaded from the archives page. Oracle Developer account required.
But beware: You will not get any security updates anymore!
If you need security updates but can't migrate to newer versions, maybe try if a migration to OpenJDK 8 is an option.
Do not use Java 9. Honestly - nobody does.
Use the OpenJDK from https://adoptopenjdk.net/
When messing around with JNI, one has to set the java.library.path
accordingly.
Unfortunately the only way is to add a system property *before* the application is started:
java -Djava.library.path=/path/to/libs
Changing the system property later doesn’t have any effect, since the property is evaluated very early and cached.
But the guys over at jdic discovered a way how to work around it. It is a little bit dirty – but hey, those hacks are the reason we all love Java…
System.setProperty( "java.library.path", "/path/to/libs" );
Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );
At first the system property is updated with the new value. This might be a relative path – or maybe you want to create that path dynamically.
The Classloader has a static field (sys_paths
) that contains the paths. If that field is set to null, it is initialized automatically.
Therefore forcing that field to null will result into the reevaluation of the library path as soon as loadLibrary()
is called…
Wer kennt das nicht - deine Kinder haben fleißig gespielt und der gesamte Boden ist mit Legos bedeckt. Während sich die Kinder so wohlfühlen, möchtest du gerne, dass sie wieder aufräumen - die Vorstellung Nachts auf dem Weg zum Kühlschrank ein Lego zu erwischen...
Du schätzt, dass etwa 2.000 Lego-Steine auf dem Boden liegen. Daher nimmst du eine Kiste und bittest deine Kinder diese mit 2.000 Lego-Steinen zu füllen.
Die Kinder machen sich sofort ans Werk und zählen laut mit. Du erkundigst dich regelmäßg nach dem aktuellen Stand:
Die erste Antwort:
411
Etwas später:
877
Irgendwann haben sie es geschafft: Sie überreichen dir stolz und zufrieden die Kiste mit exakt 2.000 Lego-Steinen.
Da die Zählerei doch recht lange gedauert - aber es ist geschafft.
Als du nachts in die Küche schleichst, trittst du prompt auf einen Lego-Stein. Mit einem Schmerzensschrei machst du das Licht an: Auf dem Boden befinden sich nach wie vor jede Menge Steine.
Wenn du den Boden aufgeräumt haben möchtest, dann spielt es absolut keine Rolle wie viele Lego-Steine in die
Kiste gepackt wurden.
Die Zählerei macht im Gegenteil das Projekt schwieriger, umfangreicher und nervig.
Du hättest stattdessen deine Kinder bitte sollen:
Bitte sorgt dafür, dass der Boden wieder frei ist.
Denn das ist es was du eigentlich möchtest. Und dieses Ziel wäre einfacher und schneller zu erreichen gewesen.
Daher sollten wir uns (nur) auf das konzentrieren, was wir auch wirklich erreichen wollen.
Und nicht auf irgendeine unwichtige Kennzahl, die man sich manchmal so wünscht (wie z.B. die Anzahl
gearbeiteter Stunden...)
Das ist für alle Beteiligten von Vorteil.
Und die Alternativen
Mit Version 11 wird das Oracle JDK nicht mehr unter allen Umständen kostenlos zur Verfügung stehen.
Spätestens wenn man Sicherheits-Updates länger als 6 Monate erhalten möchte, wird man beim Einsatz des OracleJDKs nicht mehr um Zahlungen herum kommen.
From Java 11 forward, therefore, Oracle JDK builds and OpenJDK builds will be essentially identical.
Es gibt also aus technischer Sicht keinen Grund mehr, das Oracle JDK zu benutzen.
Daher sollte bei einer Migration auf Java 11 auch gleichzeitig die Migration auf das OpenJDK ins Auge gefasst werden.
Oracle selbst wird (aller Voraussicht nach) für das OpenJDK nur 6 Monate lang Sicherheitsupdates liefern. Allerdings hat sich Red Hat inzwischen verpflichtet dies zu übernehmen.
So wird z.B. das OpenJDK 8 bis mindestens Juni 2023 unterstützt.
Unter der Adresse adoptopenjdk.net finden sich aktuell etliche Unterstützer zusammen, die das OpenJDK unterstützen.
Bereits heute wird der aktive Support des OpenJDK 11 bis September 2022 garantiert.
Es ist davon auszugehen, dass die LTS-Versionen von Red Hat (und auch IBM) noch deutlich länger unterstützt werden.
Das Oracle JDK 8 wird nur noch bis Januar 2019 kostenlos unterstützt.
Daher bleiben zwei Möglichkeiten: