# Umstieg Oracle JDK zu Open JDK



## Maliko (14. Jun 2019)

EDIT: Das sollte eigentlich SE und nicht SEO heißen. Leider kann man hier ja Titel nicht anpassen.

Hoi,

da die Java Runtime im gewerblichen Bereich ja inzwischen Kostenpflichtig ist bzw. wird und ich der glückliche bin, der unsere Projekte jetzt vom Oracle JDK auf Open JDK umstellen darf hab ich mich heute mal etwas mit der Materie beschäftigt (neue Windows VM aufgesetzt, Netbeans runtergeladen, OpenJDK runtergeladen, PATH und JAVA_HOME-Variablen eingetragen) und irgendwie bekomme ich nicht ein einziges unserer Programme mehr zum laufen. Zuerst fehlte der gesamte javax.ws-Namespace, dann fehlte die javax.activator (unter Ant) und jetzt wollte ich zuhause mal JavaFX unter Maven ausprobieren (auch hier habe ich bereits auf OpenJDK umgestellt) und hier fehlt sogar der gesamte javafx-Namespace, obwohl Maven doch eigentlich die Dependencies automatisch läd (dachte ich zumidnest). Ich hab auch extra ein JavaFX-Projekt mit Maven erstellt, so das er die Basisklasse auch automatisch erstellt hat.

Kann mir vielleicht irgendjemand sagen, ob ich da was vergesse? Es geht mir nämlich langsam echt auf den Keks jedes fehlende Assambly im Internet zu suchen und manuell zu installieren (und zwar immer aus dem Maven Repository). Immerhin waren dass alles Klassen die beim JDK von Oracle noch standartmäßig dabei waren. Weil so macht die Entwicklung von Java echt keinen Spaß mehr, wenn ich nicht einmal ein von Netbeans automatisch erstelltes Projekt kompiliert bekomme, weil Dependencys fehlen.

Bin langsam echt etwas verzweifelt. Über ein paar Tipps was da bei mir falsch läuft (arbeite auch erst seit ein paar Wochen mit Java, vorher habe ich als C#-Entwickler gearbeitet und kenne mich daher auch noch nicht so gut damit aus) würde ich mich echt freuen.

Viele Grüße
Maliko


----------



## mrBrown (14. Jun 2019)

Maliko hat gesagt.:


> EDIT: Das sollte eigentlich SE und nicht SEO heißen. Leider kann man hier ja Titel nicht anpassen.


Der Titel ist allgemein etwas merkwürdig - du willst ja keineswegs auf ein JRE verzichten. Habs mal angepasst.




Maliko hat gesagt.:


> da die Java Runtime im gewerblichen Bereich ja inzwischen Kostenpflichtig ist bzw. wird


Kostenpflichtig wird das Oracle JDK, nicht "die Java Runtime" 



Maliko hat gesagt.:


> und ich der glückliche bin, der unsere Projekte jetzt vom Oracle JDK auf Open JDK umstellen darf hab ich mich heute mal etwas mit der Materie beschäftigt


Ab der aktuellen Version sind Oracle JDK und Open JDK so gut wie identisch, was da unter dem einem nicht läuft, läuft auch unter dem anderm nicht 



Maliko hat gesagt.:


> und irgendwie bekomme ich nicht ein einziges unserer Programme mehr zum laufen. Zuerst fehlte der gesamte javax.ws-Namespace, dann fehlte die javax.activator (unter Ant)



javax.ws und javax.activation müssen als externe Dependency eingebunden werden, auch mit Oracle-JDK (mindestens ab Java 11) - die sind eben nicht Teil von Java SE, sondern von Java EE. Wie das über ant klappt, keine Ahnung. Falls andere Dependencies über ant eingebunden sind, orientier dich an denen.
Vielleicht gibt es aber hier noch jemand anderes, der sich mit Ant auskennt...



Maliko hat gesagt.:


> jetzt wollte ich zuhause mal JavaFX unter Maven ausprobieren (auch hier habe ich bereits auf OpenJDK umgestellt) und hier fehlt sogar der gesamte javafx-Namespace, obwohl Maven doch eigentlich die Dependencies automatisch läd (dachte ich zumidnest). Ich hab auch extra ein JavaFX-Projekt mit Maven erstellt, so das er die Basisklasse auch automatisch erstellt hat.



Wenn es über Maven eingebunden ist, sollte es laufen (mindestens über die Konsole). Hier gibt es ein Beispielprojekte: https://gitlab.com/mrBrown/javafx-11-demo. Dieses ist mit Maven baubar und danach ausführbar.

Wie sieht denn deine pom.xml aus?



Maliko hat gesagt.:


> Es geht mir nämlich langsam echt auf den Keks jedes fehlende Assambly im Internet zu suchen und manuell zu installieren (und zwar immer aus dem Maven Repository).


Das sollte man, zumindest wenn man ein Build-Tool nutzt, nicht machen. Meist macht das (spätestens auf lange Sicht) mehr kaputt, als es hilft.




Maliko hat gesagt.:


> Immerhin waren dass alles Klassen die beim JDK von Oracle noch standartmäßig dabei waren.


waren - im aktuellen sind die auch nicht mehr drin  War ein Fehler von Oracle, sie gebundelt auszuliefern...


----------



## Maliko (14. Jun 2019)

mrBrown hat gesagt.:


> Ab der aktuellen Version sind Oracle JDK und Open JDK so gut wie identisch, was da unter dem einem nicht läuft, läuft auch unter dem anderm nicht



Na super. Ich wusste doch dass es mir auf die Füße fällt das bisher nur mit Java 8 gearbeitet wurde. 



mrBrown hat gesagt.:


> [...] Wie das über ant klappt, keine Ahnung. Falls andere Dependencies über ant eingebunden sind, orientier dich an denen.



Bisher mach ich es immer so, dass ich im Projekt in die Properties gehe und die entsprechenden Libraries unter Libraries dem Projekt hinzufüge.



mrBrown hat gesagt.:


> Wie sieht denn deine pom.xml aus?




```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.heso.ow</groupId>
    <artifactId>OpenWarehouse</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>OpenWarehouse</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mainClass>com.heso.ow.openwarehouse.MainApp</mainClass>
    </properties>

    <organization>
        <!-- Used as the 'Vendor' for JNLP generation -->
        <name>Your Organisation</name>
    </organization>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>unpack-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>unpack-dependencies</goal>
                        </goals>
                        <configuration>
                            <excludeScope>system</excludeScope>
                            <excludeGroupIds>junit,org.mockito,org.hamcrest</excludeGroupIds>
                            <outputDirectory>${project.build.directory}/classes</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <id>unpack-dependencies</id>
                        
                        <phase>package</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <configuration>
                            <executable>${java.home}/../bin/javafxpackager</executable>
                            <arguments>
                                <argument>-createjar</argument>
                                <argument>-nocss2bin</argument>
                                <argument>-appclass</argument>
                                <argument>${mainClass}</argument>
                                <argument>-srcdir</argument>
                                <argument>${project.build.directory}/classes</argument>
                                <argument>-outdir</argument>
                                <argument>${project.build.directory}</argument>
                                <argument>-outfile</argument>
                                <argument>${project.build.finalName}.jar</argument>
                            </arguments>
                        </configuration>
                    </execution>
                    <execution>
                        <id>default-cli</id>
                        <goals>
                            <goal>exec</goal>                           
                        </goals>
                        <configuration>
                            <executable>${java.home}/bin/java</executable>
                            <commandlineArgs>${runfx.args}</commandlineArgs>
                        </configuration>
                    </execution>
                </executions> 
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <compilerArguments>
                        <bootclasspath>${sun.boot.class.path}${path.separator}${java.home}/lib/jfxrt.jar</bootclasspath>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.16</version>
                <configuration>
                    <additionalClasspathElements>
                        <additionalClasspathElement>${java.home}/lib/jfxrt.jar</additionalClasspathElement>
                    </additionalClasspathElements>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
```



mrBrown hat gesagt.:


> waren - im aktuellen sind die auch nicht mehr drin  War ein Fehler von Oracle, sie gebundelt auszuliefern...



Wie schon oben gesagt, das kommt dann davon, wenn man immer noch mit Java 8 arbeitet. Aber naja wir arbeiten ja auch immer noch mit Delphi 7.


----------



## mrBrown (14. Jun 2019)

In deiner pom.xml bindest du nichts von JavaFX ein. Stattdessen verweist du zum Kompilieren auf ein im System installiertes JavaFx, was du vermutlich nicht installiert hast (und auch mit Maven nicht brauchst).

Du kannst dir das oben verlinkte Projekt angucken, das läuft mit jedem Open JDK ab 11.


----------



## Neumi5694 (18. Jun 2019)

mrBrown hat gesagt.:


> Kostenpflichtig wird das Oracle JDK, nicht "die Java Runtime"


Nein, das stimmt so leider nicht.
Will man die Runtime gewerblich nutzen (bzw. mit der eigenen Software ausliefern), muss man blechen, sie bieten da diverse Pakete an.

Sprich: Liefert man das Programm ohne JRE aus (die Kunden sollen sich die selbst installieren), dann ist das kein Thema. Will man aber die JRE z.B. in ein Unterverzeichnis packen, dann werden Gebühren fällig.
Die gezippte JRE lässt sich auch nur noch mit einem Oracle-Account runterladen (während man den Installer so kriegt).


Ich glaube, Enterprise-Komponenten sind für die OpenJDK nicht vorgesehen. Enterprise ist meines Wissens nach zahlenden Oracle-Kunden vorbehalten. Es gibt vielleicht kostenfreie Alternativen dazu.


----------



## mrBrown (18. Jun 2019)

Neumi5694 hat gesagt.:


> Nein, das stimmt so leider nicht.


Doch.



Neumi5694 hat gesagt.:


> Will man die Runtime gewerblich nutzen (bzw. mit der eigenen Software ausliefern), muss man blechen, sie bieten da diverse Pakete an.


Das gilt, wie gesagt, für bestimmte JDKs/JVMs, wie zB das Oracle JDK  ode schon immer Zing - ist aber nichts, was man irgendwie generalisieren könnte.



Neumi5694 hat gesagt.:


> Sprich: Liefert man das Programm ohne JRE aus (die Kunden sollen sich die selbst installieren), dann ist das kein Thema. Will man aber die JRE z.B. in ein Unterverzeichnis packen, dann werden Gebühren fällig.
> Die gezippte JRE lässt sich auch nur noch mit einem Oracle-Account runterladen (während man den Installer so kriegt).


Wie du schon selbst sagst: bei Oracle (was hoffentlich niemand privat nutzt). Man kann aber beliebige andere JREs nutzen, vollkommen kostenlos, ohne Restriktionen, mit und ohne Installer.



Neumi5694 hat gesagt.:


> Ich glaube, Enterprise-Komponenten sind für die OpenJDK nicht vorgesehen. Enterprise ist meines Wissens nach zahlenden Oracle-Kunden vorbehalten. Es gibt vielleicht kostenfreie Alternativen dazu.


Das Open JDK ist die Referenzimplementierung, seit Java 11 ist das Oracle JDK nur ein Build des Open JDKs, auf dem "Oracle" steht.


EDIT: nach dem Abschicken fällt mir auf, du hast vermutlich "die Java Runtime" als "Oracle JRE" verstanden? Mit "Java Runtime" meinte ich natürlich nicht die Oracle-spezifische, sondern ganz generell Java Runtimes.


----------



## Neumi5694 (18. Jun 2019)

mrBrown hat gesagt.:


> Doch.


Nein





						Product Category
					

Java is the strategic platform for today’s demanding enterprises.   For customers facing challenging business and technical requirements—such as lowering costs, simplifying system administration and maintaining high service levels -  Java delivers proven results on everything from mission-critic




					shop.oracle.com
				








						Java SE Subscriptions | Oracle
					






					www.oracle.com
				








						Oracle Java SE License
					






					www.oracle.com
				




In den JRE Lizenzbedingungen steht sogar explizit drin, dass man sie intern verwenden, aber ohne extra Vertrag nicht weitergeben farf.



mrBrown hat gesagt.:


> Das gilt, wie gesagt, für bestimmte JDKs/JVMs, wie zB das Oracle JDK  ode schon immer Zing - ist aber nichts, was man irgendwie generalisieren könnte.


Keiner liefert die JDK aus. Die Kosten fallen für die JRE an.



mrBrown hat gesagt.:


> EDIT: nach dem Abschicken fällt mir auf, du hast vermutlich "die Java Runtime" als "Oracle JRE" verstanden? Mit "Java Runtime" meinte ich natürlich nicht die Oracle-spezifische, sondern ganz generell Java Runtimes.


Natürlich, das steht ja so explizit im ersten Post drin: *"vom Oracle JDK auf Open JDK"*. Das macht meiner Meinung nach recht eindeutig klar, dass es um die Version von Oracle geht.


----------



## mrBrown (18. Jun 2019)

Neumi5694 hat gesagt.:


> Nein
> https://shop.oracle.com/apex/f?p=DSTORE:2:::NO:RIR,RP,2:pROD_HIER_ID:123775488249871532594385


Nur, wenn man den Fehler macht, und JRE und JDK mit den Oracle-Varianten gleich setzt. Sollte man nicht tun, stiftet nur Verwirrung.

Alles, was du sagst, gilt *nur* für das *Oracle JDK* (bzw *Oracle Java SE*), das gilt aber eben nicht generell für das JDK, "die Java Runtime" oder Java. 


Und selbst wenn man deinen Beitrag nur auf die Oracle-Variante bezieht, bleibt der letzte Absatz Unsinn^^



Neumi5694 hat gesagt.:


> Natürlich, das steht ja so explizit im ersten Post drin: *"vom Oracle JDK auf Open JDK"*. Das macht meiner Meinung nach recht eindeutig klar, dass es um die Version von Oracle geht.


Genauso explizit hab ich in meiner Aussage gesagt, dass nur die Oracle-Variante teurer wird. Es ist eben nicht "die Java Runtime", die jetzt plötzlich Geld kostet, es ist die Oracle-Variante. Java ist und bleibt kostenlos und Open Source - auf nichts anderes wollte ich hinaus.

Und auch in diesem Thread war es nötig, darauf hinzuweisen, da auch hier offensichtlich Unverständnis bezüglich dessen vorherrschte.
Der ursprünglich Titel war in die Richtung von `*Java ohne JRE und SE*`, so viel dazu, dass klar war, was gemeint ist. Da war ein Hinweis, das "Java Runtime" != Oracle ist, mehr als angebracht. Das Problem hat in diesem Fall btw nicht mal was mit der Wahl des JDKs zu tun, sondern nur mit dem Umstieg von 8 auf 11.



Neumi5694 hat gesagt.:


> In den JRE Lizenzbedingungen steht sogar explizit drin, dass man sie intern verwenden, aber ohne extra Vertrag nicht weitergeben farf.


Da steht auch explizit drin, das man interne Nutzung auch einen Vertrag braucht, je nach Anwendungszweck. Gilt aber nur für *Oracle Java SE*, nicht für *Oracle Open JDK* und auch nicht für alle anderen*.*



Neumi5694 hat gesagt.:


> Keiner liefert die JDK aus. Die Kosten fallen für die JRE an.


Hab ich auch nie anders behauptet. Die Kosten fallen je nach Nutzung auf für das* Oracle* *JDK* an. Gibt da keine getrennten Regeln für JDK und JRE.


----------



## Neumi5694 (18. Jun 2019)

Ich hatte gar nicht den Titel zitiert, sondern den Text im ersten Post, dem OP ging's anscheinend um Oracle und nicht um andere JREs/JDKs.
Was soll's, alle haben recht und jeder ist in allem der Beste.


----------



## Maliko (18. Jun 2019)

Mir ging es in der Tat um Java SE (also das sog. Oracle JDK). Ich wusste bisher nicht, das die Java Runtime im OpenJDK mit drin ist. Als ich den Thread erstellt hatte, dachte ich dass man die JRE und JDK getrennt voneinander installieren muss. 

Ich meine mich zu erinnern, dass gegen 2010 als ich Java in der Ausbildung hatte, das auch noch so war, das wenn man Java installiert hat (also ganz normal das was ich als JRE bezeichnet habe) man das JDK noch zusätzlich installieren musste. Dem ist aber scheinbar inzwischen nicht mehr.

Ich denke mal dass da die Verwirrung her kommt. Ich hab auf jedem Fall schon verstanden was da sache ist, nachdem mrBrown den ersten Post verfasst hatte.


----------



## mrBrown (18. Jun 2019)

Maliko hat gesagt.:


> Mir ging es in der Tat um Java SE (also das sog. Oracle JDK). Ich wusste bisher nicht, das die Java Runtime im OpenJDK mit drin ist. Als ich den Thread erstellt hatte, dachte ich dass man die JRE und JDK getrennt voneinander installieren muss.
> 
> Ich meine mich zu erinnern, dass gegen 2010 als ich Java in der Ausbildung hatte, das auch noch so war, das wenn man Java installiert hat (also ganz normal das was ich als JRE bezeichnet habe) man das JDK noch zusätzlich installieren musste. Dem ist aber scheinbar inzwischen nicht mehr.


Das Open JDK (-project) ist die Open-Source Java SE-Referenzimplementierung, und umfasst alles, was zu Java dazu gehört, also sowohl Laufzeitumgebung als auch Entwicklungstools.
Oracle JDK, Oracle Open JDK, Zulu, AdoptOpenJDK, Corretto, SapMachine, etc sind einfach nur Builds dieser Implementierung. Daneben gibt und gab es noch andere (Zing zB nutzt nicht die üblichen GCs und ist nicht Open Source, Oracle JDK enthielt früher nicht öffentliche Teile, ...).
Je nachdem von wem gibt es die dann in der JDK und/oder in der JRE-Variante, wobei das JDK immer auch ein JRE beinhaltet.

Zum reinen Ausführen reicht ein JRE (Java *Runtime* Environment), will man aber entwickeln, muss man immer noch ein JDK (Java *Development* Kit) installieren. Ein JDK zu installieren ist mittlerweile auch der Normalfall, z.B. bekommt man _Oracle JDK_ und _Oracle Open JDK_ als normaler Nutzer nur noch in der JDK Variante. Sinnvoll ist ein reines JRE nur, wenn man nicht entwickelt und auf möglichst wenig Speicherplatz achtet.


Die Probleme, auf die du gestoßen bist, liegen auch nicht an Oracle JDK vs Open JDK (in der aktuellen Version sind die in den relevanten Teilen wie gesagt identisch), sondern am Update von 8 auf 11.
javax.ws und javax.activation sind Java EE-APIs, und werden mittlerweile nicht mehr mit Java SE ausgeliefert. Das war lange überfällig, weil die Entwicklung von Java EE und Java SE getrennt abläuft.
JavaFX war nie wirklicher Teil von Java SE, wurde nur zusammen mit manchen JDKs/JREs ausgeliefert, zB mit dem Oracle JDK und Zulu. Aus dem Oracle JDK wurde das jetzt auch entfernt und die Entwicklung gänzlich davon getrennt, Zulu z.B. gibts aber weiterhin gebundled mit JavaFX - wobei das nur für bestehende Programm interessant ist, alle anderen sollten JavaFX als normale Dependency einbinden und sich nicht auf ein passendes JRE verlassen.


Hast du deine Programme denn jetzt zum Laufen bekommen?


----------



## Maliko (18. Jun 2019)

Das JavaFX-Projekt ja, nachdem ich in Maven das Dependency entsprechend eingetragen habe. Das Java-Ant Projekt leider nicht. Da mir auch die Zeit fehlt (muss bis ende der Woche zwingend fertig sein) bin ich vom JDK 12 wieder auf java-1.8.0-openjdk-1.8.0.91-3 zurückgegangen. Damit funktioniert es zumindest und in der Firma interessiert sowieso niemanden ob aktuelle Technologien genutzt werden, solange es läuft und möglichst wenig Geld kostet.


----------



## mrBrown (18. Jun 2019)

Maliko hat gesagt.:


> java-1.8.0-openjdk-1.8.0.91-3


Wo hast du denn so eine alte Version herbekommen?   Da könntest du ruhig auf die aktuelle 8er-Version wechseln


----------



## mihe7 (19. Jun 2019)

Maliko hat gesagt.:


> in der Firma interessiert sowieso niemanden ob aktuelle Technologien genutzt werden, solange es läuft und möglichst wenig Geld kostet.


Wen in der Firma sollte das auch interessieren?


----------



## Maliko (19. Jun 2019)

mrBrown hat gesagt.:


> Wo hast du denn so eine alte Version herbekommen?   Da könntest du ruhig auf die aktuelle 8er-Version wechseln



Das war die einzige 8er-Version die ich überhaupt noch gefunden habe. OpenJDK selbst verweist bei Versionen unter 10 nämlich nur noch auf die Oracle JDK-Varianten.


----------



## mihe7 (19. Jun 2019)

Die 202 ist IMO die letzte, die unter der alten Lizenz verfügbar war:






						Java Archive Downloads - Java SE 8
					






					www.oracle.com


----------



## mihe7 (19. Jun 2019)

Ach so, es ging ja um OpenJDK. Dann schau z.. B. mal hier https://adoptopenjdk.net/


----------



## thecain (19. Jun 2019)

Azul macht z.B sogar immer noch extra JRE Builds https://www.azul.com/downloads/zulu/ falls das gewünscht wäre


----------



## mrBrown (19. Jun 2019)

thecain hat gesagt.:


> Azul macht z.B sogar immer noch extra JRE Builds https://www.azul.com/downloads/zulu/ falls das gewünscht wäre


Das von @mihe7 genannte AdoptOpenJDK auch  Corretto und SapMachine müsste es auch in der JRE-Variante geben


----------



## Maliko (19. Jun 2019)

Hey cool. Die Seiten speicher ich mir mal beide ab. Kann man immer gebrauchen. Danke euch.


----------



## mrBrown (19. Jun 2019)

https://jdk.dev/download/


----------

