BestPractise für Deployment unter Windows gesucht

U

Udo_von_ESA

Neues Mitglied
Auf meinem Entwicklungsrechner möchte ich eine Anwendung schreiben und diese dann auf dem Produktiv-Rechner laufen lassen. In WWW habe ich nun folgendes Vorgehen gefunden:
  • Entwicklungsrechner: installiere aktuelle JDK und ezeuge *.jar
  • Produktiv-Rechner: installiere aktuelle JRE und starte *.jar
Leider klappt das nicht. Der Produktiv-Rechner zeigt eine Fehlermeldung weil die JRE mit Version 8 eine kleinere Version hat als das JDK mit Version 15!
Die aktuellen Versionen sind:
  • Java Development Kit (JDK): "Java SE 15.0.1" (Quelle: www.oracle.com)
  • Java Runtime Environment (JRE): "jre-8u271-windows-x64.exe" (Quelle: www.java.com)
Vermutlich gehe ich also den falschen Weg.
Welches Vorgehen ist hier aktuell "Best Practise" zum Deployment unter Windows?
 
Beste Antwort
kneitzel
Dann noch einmal in Kürze die wichtigen Punkte:
Ja, Oracle bietet keine aktuelleren JRE an.

Optionen:
a) Man kann auch einfach das ganze JDK installieren.
b) Es gibt andere Anbieter, z.B. AdoptOpenJDK (https://adoptopenjdk.net/). Da finden sich auch JREs (Andere Plattformen auswählen um auch die JRE angezeigt zu bekommen.)
c) Gib kein einfaches JAR File weiter! Das ist eine Support Hölle, in die Du nicht möchtest! Gibt (native) Images raus! Also per JLink ein Image erzeugen und dann per JPackage zusammen packen. Das ist relativ einfach, so man Maven oder Gradle nutzt (Dazu würde ich eh immer raten!)
temi

temi

Top Contributor
Installiere halt einfach die JRE in der richtigen Version oder entwickle mit Version 8, du hast ja den Grund für den Fehlschlag genannt.

Du solltest auch überlegen auf ein freies JDK, z.B. OpenJDK zu wechseln. Bei Oracle haben sich diesbezüglich die Lizenzbedingungen geändert.

Außerdem sollest du in Betracht ziehen eine LTS (Long Time Support) Version von Java zu verwenden. Die aktuelle ist 11.
 
T

thecain

Top Contributor
Außerdem sollest du in Betracht ziehen eine LTS (Long Time Support) Version von Java zu verwenden. Die aktuelle ist 11.
Warum? Ich lese die Empfehlung öfters, aber Sinn macht es mMn nur, wenn man den kommerziellen Support auch nutzt. Das tun die Wenigsten, dann sehe ich keinen Vorteil darin, auf die aktuellsten Features zu verzichten.
 
temi

temi

Top Contributor
Warum? Ich lese die Empfehlung öfters, aber Sinn macht es mMn nur, wenn man den kommerziellen Support auch nutzt. Das tun die Wenigsten, dann sehe ich keinen Vorteil darin, auf die aktuellsten Features zu verzichten.
Weil sonst der "Kunde" gezwungen ist immer auf die aktuelleste JRE zu wechseln und das für Features, die vermutlich gar nicht genutzt werden. Das ist für mich der Sinn von LTE-Versionen (auch mein Linux hier). Ich möchte nicht ständig auf eine neue Version upgraden müssen, aber trotzdem noch Sicherheitsupdates und Fehlerbehebung erhalten (Wobei: gilt das auch für Java? Weiß ich nicht, vielleicht kann ein Wissender was dazu sagen).

Im Firmenumfeld ist es dem User u. U. gar nicht möglich hier ein Upgrade durchzuführen, weil er gar nicht die entsprechenden Berechtigungen besitzt.

Siehe auch das Beispiel des TE. Sein "Kunde" hat Java 8, er entwickelt mit Java 15.

Aber wie ich geschrieben habe, "er sollte es in Betracht ziehen". Das bedeutet ja nicht, dass er es auch tun muss. Man kann drüber nachdenken.
 
L

LimDul

Top Contributor
Warum? Ich lese die Empfehlung öfters, aber Sinn macht es mMn nur, wenn man den kommerziellen Support auch nutzt. Das tun die Wenigsten, dann sehe ich keinen Vorteil darin, auf die aktuellsten Features zu verzichten.
Nein, sinnvoll ist es auch, wenn man keine Kontrolle über die Zielumgebung hat. Die aktuellsten Versionen sollte man nur nutzen, wenn man
* Entweder vorgeben kann, welche Java Version auf den Zielsystem installiert sein muss
* Oder die Umgebung direkt mit ausliefert (quasi das JRE mit ausliefert)

Ansonsten sollte man - insbesondere im Unternehmensumfeld - immer auf die LTS Versionen setzen. Beispiel aus der Praxis, wir haben ein Modellierungstool (als Eclipse-Plugin), mit einer Java-Runtime die die erzeugten XMLs interpretiert sowie darauf aufbauend ein paar Enterprise Anwendungen. Aktuelle Voraussetzungen:
* Modellierungstool: Java 8
* Enterprise Anwendungen: Java 8
* Runtime: Java 6

Ab Mitte 2021 wird sich das ändern zu:
* Modellierungstool: Java 11
* Enterprise Anwendungen: Java 11
* Runtime: Java 8

Es ist utopisch da auf was neueres zu gehen, weil das installieren Unternehmen nicht. Deswegen wird die Runtime auch nur (immerhin endlich - ca. 200 Sonar Warnings weniger hier im Projekt) auf Java 8 angehoben - weil selbst Java 11 für manche Kunden zu neu ist.
 
kneitzel

kneitzel

Top Contributor
Der wichtige Punkt sind aus meiner Sicht Security Updates. Java hatte in der Vergangenheit öfter das eine oder andere Security Issue.

Das spielt natürlich keine Rolle, wenn das eh nicht beachtet wird. Wenn ich weiß, dass der Kunde heute ein JRE oder JDK installiert und dann nur mehr aktualisiert, dann macht es keinen Unterschied.

bezüglich des Deployments möchte ich aber noch sagen, dass Iracle das JRE wohl nicht mehr anbietet, weil es nicht mehr notwendig ist:
Es gibt ab 11 JLink. Du erstellst damit ein Image, das alle Dateien enthält und das der Kunde dann bekommen kann.
Ab 14 gibt es dann noch JPackage um einen Installer zu bauen oder ein Native Image (das Image ist eine Verzeichnisstruktur, die neben Startscript auch JRE und so enthält.

Und spätestens dann ist der Punkt Security Updates hinfällig da die nur zu bekommen wären, wenn eine neue Version ausgeliefert werden soll ...

Daher kann ich @thecain gut verstehen und es spricht nichts gegen die aktuelle Version für einzelne Entwickler. LTS sehe ich eher bei großen Firmen wobei es da auch nicht wirklich Sinn macht. Der Gedanke ist, dass man nicht weiß wann ein Update gefordert wird von einem alten Projekt. Aber die IDEs, die ich kenne, können mit mehreren JDKs umgehen.

Aber in Sache Deployment: JLink und JPackage ansehen! JLink ist einfach in Gradle und Maven zu integrieren ... Installer kann dann mit JPackage oder WIX gebaut werden ... Das wäre das Vorgehen, das ich wählen würde um den Support zu vereinfachen ...
 
T

thecain

Top Contributor
* Oder die Umgebung direkt mit ausliefert (quasi das JRE mit ausliefert)
Genau auf das wollte ich hinaus... Mit den von @kneitzel auch schon erwähnten Tools, kann man ohne Probleme ein massgenschneidertes JRE direkt mitausliefern.

Sich auf ein installiertes JRE zu verlassen ist schwierig, sobald man sich nicht mehr in einem gemangten Umfeld mehr befindet. Und in diesen Umfeldern ist es dann auch nicht mehr so gerne gesehen, wenn einfach ein .jar auf einen PC kopiert und ausgeführt wird. Dafür sollten dann auch spezielle Softwareverteilungstools eingesetzt werden.

Ich habe mich einfach ein bisschen an der Standardaussage "gestört" ein LTS zu verwenden. Das es dann da Ausnahmen und Sonderfälle gibt ist klar... (Ich habe z.B. gerade letzte Woche ein jdk7 auf einem Server installieren müssen um ein Tool von einem externen Lieferanten zu verwenden.)

Das ist aber auch nur meine persönliche Meinung und jeder darf gerne andere haben. Falsch und Richtig gibt es ja bekanntlich selten.
 
L

LimDul

Top Contributor
Genau auf das wollte ich hinaus... Mit den von @kneitzel auch schon erwähnten Tools, kann man ohne Probleme ein massgenschneidertes JRE direkt mitausliefern.

Sich auf ein installiertes JRE zu verlassen ist schwierig, sobald man sich nicht mehr in einem gemangten Umfeld mehr befindet. Und in diesen Umfeldern ist es dann auch nicht mehr so gerne gesehen, wenn einfach ein .jar auf einen PC kopiert und ausgeführt wird. Dafür sollten dann auch spezielle Softwareverteilungstools eingesetzt werden.

Ich habe mich einfach ein bisschen an der Standardaussage "gestört" ein LTS zu verwenden. Das es dann da Ausnahmen und Sonderfälle gibt ist klar... (Ich habe z.B. gerade letzte Woche ein jdk7 auf einem Server installieren müssen um ein Tool von einem externen Lieferanten zu verwenden.)

Das ist aber auch nur meine persönliche Meinung und jeder darf gerne andere haben. Falsch und Richtig gibt es ja bekanntlich selten.
Ich glaube dann sind wir uns relativ einig.

- Liefere ich die Umgebung mit aus, dann eine aktuell supportete Version. Das kann eine LTS Version sein, dass kann das aktuellste OpenJDK sein, dass kann sonst was sein.
- Muss die Umgebung bereit gestellt werden, dann muss man das nehmen was bereit gestellt wird. Wenn man es nicht weiß, dann ist die aktuellste LTS Version der Best Guess.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
https://www.reddit.com/r/java/comments/kappmi/_/gffj7sg
Moving from 11 to 17 gives you the worst of both worlds. You end up investing more effort in the upgrade, which may have removed API elements without any deprecation warnings (the JDK's development process ignores which versions companies choose to sell LTS for) as well as missing out on constant performance improvements and features. LTS is mostly for legacy, or applications that aren't heavily developed, and when chosen appropriately, it's best to remain on such a version for 5-6 years so as not to end up spending too much effort on migration. If you want 17, you might as well use 16. And if you want LTS and are currently on 11, you probably don't want 17 and might want to wait a few more years, as your application doesn't need or want new features, anyway.

Put another way, if you're eagerly waiting for a new release with LTS, LTS probably isn't for you. If you're looking with horror at a new release with LTS as signifying the end of updates for your current version, then it is for you. Or even more simply, the law of Java LTS is: if you want it -- you don't need it; if you need it -- you don't want it.


Ich möchte nicht ständig auf eine neue Version upgraden müssen, aber trotzdem noch Sicherheitsupdates und Fehlerbehebung erhalten (Wobei: gilt das auch für Java? Weiß ich nicht, vielleicht kann ein Wissender was dazu sagen).
Ja, Patches werden auch zurückportiert.
Wenn man aber sowieso updated, dann kann man auch direkt auf die neuste Major-Version updaten.


- Liefere ich die Umgebung mit aus, dann eine aktuell supportete Version. Das kann eine LTS Version sein, dass kann das aktuellste OpenJDK sein, dass kann sonst was sein.
- Muss die Umgebung bereit gestellt werden, dann muss man das nehmen was bereit gestellt wird. Wenn man es nicht weiß, dann ist die aktuellste LTS Version der Best Guess.
Wobei ich eher die vorherige LTS als "Best Guess" bezeichnen würde. Wie du ja selbst sagtest, Java 11 ist für viele noch zu neu (und daran wird sich vermutlich auch innerhalb des nächsten Jahres nichts dran ändern :/).

EDIT:
immer auf die aktuelleste JRE zu wechseln und das für Features, die vermutlich gar nicht genutzt werden
Die genutzten Features sind besseres Laufzeitverhalten – neuere Versionen sind üblicherweise schneller, weniger Speicherlastig, der GC arbeitet besser und sie laufen stabiler.
Features in der Sprache selbst sind ja nur ein kleiner Teil dessen, was neue Versionen mit sich bringen.
 
Zuletzt bearbeitet:
U

Udo_von_ESA

Neues Mitglied
Vielen Dank für die vielen Ratschläge. Leider ist mein Problem jedoch:
Die aktuellen Versionen sind:
  • Java Development Kit (JDK): "Java SE 15.0.1" (Quelle: www.oracle.com)
  • Java Runtime Environment (JRE): "jre-8u271-windows-x64.exe" (Quelle: www.java.com)
Ich möchte ja die neueste JRE verwenden. Leider finde ich nur Version 8 im Internet. Wo bekomme ich eine Runtime V15 her?
Oder muss ich tatsächlich das Development Kit zerpflücken um eine aktuelle Runtime isolieren zu können?
 
kneitzel

kneitzel

Top Contributor
Dann noch einmal in Kürze die wichtigen Punkte:
Ja, Oracle bietet keine aktuelleren JRE an.

Optionen:
a) Man kann auch einfach das ganze JDK installieren.
b) Es gibt andere Anbieter, z.B. AdoptOpenJDK (https://adoptopenjdk.net/). Da finden sich auch JREs (Andere Plattformen auswählen um auch die JRE angezeigt zu bekommen.)
c) Gib kein einfaches JAR File weiter! Das ist eine Support Hölle, in die Du nicht möchtest! Gibt (native) Images raus! Also per JLink ein Image erzeugen und dann per JPackage zusammen packen. Das ist relativ einfach, so man Maven oder Gradle nutzt (Dazu würde ich eh immer raten!)
 
Beste Antwort
L

LimDul

Top Contributor
Vielen Dank für die vielen Ratschläge. Leider ist mein Problem jedoch:

Ich möchte ja die neueste JRE verwenden. Leider finde ich nur Version 8 im Internet. Wo bekomme ich eine Runtime V15 her?
Oder muss ich tatsächlich das Development Kit zerpflücken um eine aktuelle Runtime isolieren zu können?
Es gibt keine separaten JREs (Edit: von Oracle) mehr, wie @kneitzel schrieb, ist der präfierte Weg jetzt eine Lauffähige Anwendung mit den Teilen der Runtime zu bauen, die man wirklich braucht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
lilrack UML Diagramm für Parkplatzverwaltung Java Basics - Anfänger-Themen 8
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
T Start-Activity für Java Maven Web-Anwendung festlegen Java Basics - Anfänger-Themen 2
T Alternative für switch case Java Basics - Anfänger-Themen 1
P Ressourcen für JSON & API Informationen? Java Basics - Anfänger-Themen 1
M Java Einstellung von Apache POI für MS Word Erstellung mit Eclipse Java Basics - Anfänger-Themen 6
L Compiler-Fehler SupressWarning für clone() Java Basics - Anfänger-Themen 6
P Wie für EIN Java Programm von 64bit Java (=Standard) auf 32bit Java Installation (Windows) umschalten? Java Basics - Anfänger-Themen 6
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
D Ampel für Mitarbeiter zum An-/Abwesend zeigen Java Basics - Anfänger-Themen 28
T Wahrscheinlichkeiten für Slot Machine Java Basics - Anfänger-Themen 13
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
T Roulette für Anfänger Java Basics - Anfänger-Themen 7
A Überprüfung für unentschieden in TicTacToe Java Basics - Anfänger-Themen 10
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
J alternierendes Probing-Verfahren für Hash-Tabellen implementieren Java Basics - Anfänger-Themen 0
V Ersätze für Java-Scanner Java Basics - Anfänger-Themen 9
B Get / Set - Methode für verschiedene Entities? (generisch) Java Basics - Anfänger-Themen 21
S Was für Aufgaben könnten sich hier hinter verbergen? Java Basics - Anfänger-Themen 5
R OOP Einfaches Programmierbeispiel für Assoziation, Aggregation und Komposition gesucht Java Basics - Anfänger-Themen 10
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
NeoLexx Variable für Array wird nicht korrekt übergeben Java Basics - Anfänger-Themen 45
A Literale für primitive Daten Typen Java Basics - Anfänger-Themen 4
M Lösung Aufgabe - Java Programmiren lernen für Dummies Java Basics - Anfänger-Themen 11
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
D Zusammenhängenden Graphen für Gleisnetz erstellen Java Basics - Anfänger-Themen 13
M Writer für unterschiedliche Obj/inbt/double erstellen? Java Basics - Anfänger-Themen 1
D Denkweise für Rekusionen Java Basics - Anfänger-Themen 1
L Worauf muss ich achten, wenn ich externe Bibliotheken für meine Anwendungen verwende? Java Basics - Anfänger-Themen 6
M Unverständnis für ":" und "?" Java Basics - Anfänger-Themen 28
X Buchungssystem für Busse Java Basics - Anfänger-Themen 11
W Eclipse Autoformatierung für Streams ändern ? Java Basics - Anfänger-Themen 1
X Modellieren eines Buchungssystems für Busfahrkarten Java Basics - Anfänger-Themen 53
T Collections Methode (Knoten hinzufügen) für Graphen Java Basics - Anfänger-Themen 32
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
T Text-Ausgabe für Textadventure - Organisation Java Basics - Anfänger-Themen 5
Kamy Ein einfaches "Vier Gewinnt" Spiel für Anfängerin Java Basics - Anfänger-Themen 51
I Preis finden für ein Uber-App(?) Java Basics - Anfänger-Themen 3
G Unterklassen (Klasse für Ausgabe) Java Basics - Anfänger-Themen 4
F RegEx für Email Java Basics - Anfänger-Themen 2
F Methode für Teilbarkeit durch 5 tut was anderes.... Java Basics - Anfänger-Themen 3
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
F Hilfe für einen Anfänger! Java Basics - Anfänger-Themen 4
K nur für das verständnis Java Basics - Anfänger-Themen 3
A Bedingungen für Parameterwerte Java Basics - Anfänger-Themen 7
H For-Schleife für 60 sekunden laufen lassen Java Basics - Anfänger-Themen 1
K GUI Entwicklung - Welche Richtung passt für euch zum mobilen Zeitalter? Java Basics - Anfänger-Themen 4
J Projektideen für Java (auch gehobeneres Niveau)? Java Basics - Anfänger-Themen 16
K Konstruktor für ein Objekt mit Zugriffsmethoden Java Basics - Anfänger-Themen 7
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
P Übungsaufgaben für Anfänger? Java Basics - Anfänger-Themen 2
D Richtig für Programmieren an der UNI lernen Java Basics - Anfänger-Themen 8
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
M Welches Framework für kleine WebApp nutzen? Java Basics - Anfänger-Themen 6
O Iterator für eine geordnete Menge Java Basics - Anfänger-Themen 134
N Schleife für ein Würfelspiel Java Basics - Anfänger-Themen 10
R getUserProperties() macht für mich keinen Sinn Java Basics - Anfänger-Themen 8
F Regex für Inlineformatierungen Java Basics - Anfänger-Themen 12
M Formate für Dateien und Pfade? Java Basics - Anfänger-Themen 1
N Obstmarkt für Intellektuelle Java Basics - Anfänger-Themen 40
J Erste Schritte Actionlistener für tbar/ JButton Java Basics - Anfänger-Themen 15
B Erste Schritte nio oder io für neues Projekt Java Basics - Anfänger-Themen 1
O Ideen für kleinere Projekte um Java zu lernen Java Basics - Anfänger-Themen 1
F Bedingung für Eingabe Java Basics - Anfänger-Themen 2
S Hilfe für Aufgabe Java Basics - Anfänger-Themen 4
C Verbesserungsvorschlag für effizienteren Code - (Project Euler10) Java Basics - Anfänger-Themen 26
B Spielfiguren für ein Beute-Jägerspiel programmieren Java Basics - Anfänger-Themen 12
L Binären Bäume für beliebige Datentypen Java Basics - Anfänger-Themen 15
B API für Längen und Breitengrad zu bekommen Java Basics - Anfänger-Themen 2
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
R Erste Schritte Materialien für Java-Anfänger Java Basics - Anfänger-Themen 7
N Project layout eclipse ( seperate ordner für klassen ? ) Java Basics - Anfänger-Themen 1
H Interface Final für Parameter in überschriebenen Methoden? Java Basics - Anfänger-Themen 3
S JDK 9 für Windows 32 bit installiert, aber es funktioniert nix Java Basics - Anfänger-Themen 6
L Neue Klasse für TableView? Java Basics - Anfänger-Themen 17
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
D Setter/Getter für Instanzvariablen praktisch? Java Basics - Anfänger-Themen 19
A Erste Schritte Hilfe für for-Schleife Java Basics - Anfänger-Themen 1
jaleda100 Component für Suche Java Basics - Anfänger-Themen 4
S Server - für jeden Client ein Serverthread Java Basics - Anfänger-Themen 2
Queiser Datentypen 2 generische Datentypen für eine Schnittstelle Java Basics - Anfänger-Themen 1
M Verbesserung für JRadioButton Java Basics - Anfänger-Themen 10
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
J Musikplayer zu schwer für Anfänger? Java Basics - Anfänger-Themen 3
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
J Für jeden Buchstaben eine Zahl Java Basics - Anfänger-Themen 1
Hanschyo Formel für n-Eck Java Basics - Anfänger-Themen 3
C Stack und Queue in Aktion (Bitte Hilfe für die Klausur) Java Basics - Anfänger-Themen 7
L Polymorphie Dynamischer oder Statischer Typ für Methodenparameter Java Basics - Anfänger-Themen 8
C Idee für Programmierprojekt Java Basics - Anfänger-Themen 3
C Ich brauche hilfe für meine Klausur Java Basics - Anfänger-Themen 13
S Gibt es für die Klasse HashMap Generic Implementierungen? Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Anzeige

Neue Themen


Oben