BestPractise für Deployment unter Windows gesucht

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
K
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

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.
 

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.
 

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.
 
K

kneitzel

Gast
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 ...
 

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.
 

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

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:

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?
 
K

kneitzel

Gast
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

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
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
M GUI für Vier-Gewinnt. Java Basics - Anfänger-Themen 4
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
Ostkreuz Counter für Booleanwerte Java Basics - Anfänger-Themen 8
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
Jxhnny.lpz Randomisier für Buttons Java Basics - Anfänger-Themen 13
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
M generate Methode für Streams Java Basics - Anfänger-Themen 6
I Datenmodell für "Tags" Java Basics - Anfänger-Themen 6
Lion.King for-Kontrollstruktur für Pyramide Java Basics - Anfänger-Themen 8
B Mit Countdown Midnestdauer für Teilaufgabenerledigung erzwingen Java Basics - Anfänger-Themen 8
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
K Spieleidee gesucht für Informatikprojekt - JAVA (BlueJ)? Java Basics - Anfänger-Themen 15
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
javamanoman Java für Online Banking Java Basics - Anfänger-Themen 12
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
I SQL / JPA Query für StartDate und EndDate Java Basics - Anfänger-Themen 1
T getMethode für ein Array Java Basics - Anfänger-Themen 2
Fats Waller Farben mixen für den Hintergrund ? Java Basics - Anfänger-Themen 1
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
K Für was braucht man die left und right shift operatoren? Was bringen die, also welchen Zweck haben die? Java Basics - Anfänger-Themen 15
N Api nur für Textdatein (.txt) Java Basics - Anfänger-Themen 2
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
R Ist Java das Richtige für mich? Java Basics - Anfänger-Themen 4
E Mittelquadratmethode für Hexadezimalzahlen Java Basics - Anfänger-Themen 1
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
S BubbleSort für ArrayLists Java Basics - Anfänger-Themen 3
T Übungsbuch für Anfänger Java Basics - Anfänger-Themen 3
L Konzept für Quiz Java Basics - Anfänger-Themen 33
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
L loop für Namen Java Basics - Anfänger-Themen 11
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
I Entity erstellen, die für API gedacht ist Java Basics - Anfänger-Themen 33
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
A Junit Test für MysqlDataSource JDBC Java Basics - Anfänger-Themen 3
Animal-Mother BMI Rechner erstellen für W/M Java Basics - Anfänger-Themen 7
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
A Java die richtige Programmiersprache für mein Projekt? Java Basics - Anfänger-Themen 1
I DecimalFormat in Zahlenformat für Währung, habe 7,99, bekomme aber 7 Java Basics - Anfänger-Themen 4
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

Ähnliche Java Themen

Neue Themen


Oben