Έκδοση Java
-
H Java σαν γλώσσα έχει διάφορα versions και κάθε version προσθέτει χαρακτηριστικά.
Οι υλοποιήσεις της γλώσσας είναι πολλές, οι πιο γνωστές της Oracle και το OpenJDK. To JDK είναι ένα σύνολο από προγράμματα και βιβλιοθήκες της Java για να μπορέσει να μεταγλωττίσει και να εκτελέσει Java προγράμματα. Το JRE από την άλλη είναι ένα υποσύνολο του JDK και περιέχει μόνο τα απαραίτητα για την εκτέλεση και όχι για την μεταγλώττιση.Συνήθως το JDK 21 είναι αυτό που μπορεί να μεταγλωττίσει και να τρέξει προγράμματα της Java 21. Μπορεί όμως να τρέξει και προγράμματα παλιότερης Java. Προφανώς δεν μπορείς να τρέξεις Java 21 με το JDK 17, αλλά μπορείς να τρέξεις Java 17 με JDK 21 (αν το υποστηρίζει το JDK).
Με αυτά σαν εισαγωγή έχουμε:
To
compiler.source
λέει στονjavac
σύμφωνα με ποιους κανόνες ποιας έκδοσης της Java να ελέγξει το πρόγραμμα. Για παράδειγμα αν χρησιμοποιήσεις κάποιο χαρακτηριστικό που εμφανίστηκε στην Java 21 αλλά έχεις βάλει source 17 θα σου χτυπήσει λάθος.Το
compiler.target
λέει στον μεταγλωττιστή τι κώδικα να παράξει. Αν έχεις επιλέξει 17 τότε το "εκτελέσιμο" jar θα μπορεί να τρέξει με το πρόγραμμαjava
(του JDK17 ή JRE17). Συνήθως όμως και νεότερα JDK/JRE μπορούν να τρέξουν αυτόν τον κώδικα. -
Ναι. Πάντως ο πιο σίγουρος τρόπος είναι να χρησιμοποιήσεις κατευθείαν το maven για να μεταγλωττίσεις τον κώδικας σου γιατί τo pom.xml είναι αρχείο του maven και όχι του IDE. Δηλαδή να τρέξεις στο terminal
mvn compile
Το λέω αυτό γιατί πολλές φορές το IDE παίρνει πρωτοβουλίες και θέλει reload το pom.xml για να διαβάζει τις αλλαγές κτλ. Δεν θα εμπιστευόμουν με κλειστά μάτια ότι παίζει το IDE πάντα με τις τελευταίες ρυθμίσεις.