Εισαγωγή σε Maven

8 λεπτά

Πίνακας περιεχομένων


1 — Τι είναι το Maven;

Το Apache Maven είναι εργαλείο αυτοματοποίησης κατασκευής (build automation) για έργα Java. Παίρνει τον πηγαίο σας κώδικα και παράγει ένα παραδοτέο (ένα αρχείο .jar ή .war) οργανώνοντας όλα τα βήματα: μεταγλώττιση, δοκιμές, συσκευασία, διαχείριση εξαρτήσεων.

Συγκεκριμένα, το Maven απαντά σε τρεις θεμελιώδεις ανάγκες:

ΑνάγκηΤι κάνει το Maven
Κατασκευή του έργουΜεταγλωττίζει τον κώδικα και παράγει ένα τεχνούργημα (.jar, .war)
Διαχείριση των εξαρτήσεωνΚατεβάζει αυτόματα τις απαραίτητες βιβλιοθήκες
ΤυποποίησηΕπιβάλλει την ίδια δομή έργου παντού

Ο πυρήνας του Maven είναι ένα μοναδικό αρχείο, το pom.xml (Project Object Model), που περιγράφει το έργο: την ταυτότητά του, τις εξαρτήσεις του και τον τρόπο κατασκευής του. Είναι η «συνταγή» που εκτελεί το Maven.

Χωρίς Maven, η κατασκευή ενός έργου Java σημαίνει χειροκίνητη μεταγλώττιση με javac, χειροκίνητη λήψη κάθε βιβλιοθήκης και αυτοδιαχείριση του classpath. Το Maven αυτοματοποιεί όλα αυτά από ένα μόνο αρχείο.

🔧 Μίνι-άσκηση — Αναφέρετε τις τρεις θεμελιώδεις ανάγκες στις οποίες απαντά το Maven.

✅ Δείτε μια λύση

Κατασκευή του έργου (μεταγλώττιση + παραγωγή τεχνουργήματος .jar/.war), διαχείριση των εξαρτήσεων (λήψη βιβλιοθηκών) και τυποποίηση (επιβολή ίδιας δομής έργου).

↑ Επιστροφή στην αρχή


2 — Το πρόβλημα που λύνει το Maven

Πριν από το Maven, κάθε έργο Java κατασκευαζόταν «στο χέρι» ή με αυτοσχέδια σενάρια. Αυτό δημιουργούσε αρκετά επαναλαμβανόμενα προβλήματα:

Πρόβλημα (χωρίς Maven)Λύση (με Maven)
Εύρεση και λήψη των .jar ένα προς έναΔήλωση στο pom.xml, αυτόματη λήψη
Συγκρούσεις εκδόσεων βιβλιοθηκώνΑυτόματη μεταβατική επίλυση
«Στον υπολογιστή μου μεταγλωττίζεται, στον δικό σου όχι»Αναπαραγώγιμη και τυποποιημένη κατασκευή
Κάθε έργο ταξινομημένο διαφορετικάΕπιβεβλημένη δομή φακέλων

Η κεντρική ιδέα: ένας προγραμματιστής που εντάσσεται σε έργο Maven ξέρει αμέσως πού βρίσκεται ο κώδικας, πού είναι οι δοκιμές και πώς να εκκινήσει την κατασκευή — ανεξάρτητα από την εταιρεία ή το έργο.

bash
# Με το Maven, η κατασκευή ενός άγνωστου έργου συνοψίζεται σε:
mvn package

Το Maven μετατρέπει το «πώς κατασκευάζεται αυτό το έργο;» — μια ερώτηση που κάποτε έπαιρνε ώρες — σε μία και μοναδική καθολική εντολή.

🔧 Μίνι-άσκηση — Γράψτε τη μόνη εντολή που αρκεί για να κατασκευάσετε ένα άγνωστο έργο Maven.

✅ Δείτε μια λύση
bash
mvn package

↑ Επιστροφή στην αρχή


3 — Σύμβαση αντί για διαμόρφωση

Η κεντρική αρχή του Maven είναι «σύμβαση αντί για διαμόρφωση» (convention over configuration). Αντί να περιγράφετε τα πάντα ρητά, το Maven ξεκινά από λογικές προεπιλεγμένες τιμές. Αν τηρείτε τις συμβάσεις, σχεδόν τίποτε δεν χρειάζεται να διαμορφώσετε.

Παραδείγματα προεπιλεγμένων συμβάσεων:

ΣτοιχείοΠροεπιλεγμένη αναμενόμενη θέση
Κύριος πηγαίος κώδικαςsrc/main/java
Κύριοι πόροιsrc/main/resources
Κώδικας δοκιμώνsrc/test/java
Παραγόμενο τεχνούργημαtarget/

Ας συγκρίνουμε τις φιλοσοφίες:

ΠροσέγγισηΣυνέπεια
Διαμόρφωση των πάντωνΕυέλικτη αλλά φλύαρη, επιρρεπής σε σφάλματα
Προεπιλεγμένη σύμβασηΛιτή, συνεπής μεταξύ έργων, γρήγορη εκκίνηση

Μπορείτε πάντα να επαναπροσδιορίσετε τις συμβάσεις αν χρειαστεί, αλλά το 95 % των έργων αρκείται στις προεπιλογές. Λιγότερη διαμόρφωση = λιγότερα σφάλματα.

↑ Επιστροφή στην αρχή


4 — Τυπική δομή ενός έργου Maven

Κάθε έργο Maven ακολουθεί την ίδια δενδροειδή δομή. Η γνώση της επιτρέπει να πλοηγείστε ακαριαία σε οποιοδήποτε έργο.

Λεπτομέρεια των φακέλων:

ΔιαδρομήΡόλος
pom.xmlΗ συνταγή του έργου (στη ρίζα)
src/main/javaΟ πηγαίος κώδικας της εφαρμογής
src/main/resourcesΑρχεία μη Java (.properties, .xml, εικόνες)
src/test/javaΟι κλάσεις μοναδιαίων δοκιμών
src/test/resourcesΠόροι που χρησιμοποιούν οι δοκιμές
target/Φάκελος εξόδου: μεταγλωττισμένες κλάσεις και τελικό τεχνούργημα

🔧 Μίνι-άσκηση — Σε ποιον φάκελο πρέπει να τοποθετήσετε μια κλάση μοναδιαίας δοκιμής και σε ποιον ένα αρχείο application.properties;

✅ Δείτε μια λύση

Η μοναδιαία δοκιμή πηγαίνει στο src/test/java και το application.properties στο src/main/resources.

bash
# Τυπική δενδροειδής δομή όπως φαίνεται στη γραμμή εντολών
mon-projet/
├── pom.xml
├── src/
   ├── main/
   ├── java/        # π.χ. com/exemple/App.java
   └── resources/   # π.χ. application.properties
   └── test/
       └── java/        # π.χ. com/exemple/AppTest.java
└── target/              # παράγεται : μην το εκδοσιολογείτε (.gitignore)

⚠️ Ο φάκελος target/ αναδημιουργείται σε κάθε κατασκευή. Προσθέστε τον στο .gitignore: δεν εκδοσιολογούμε ποτέ τα μεταγλωττισμένα τεχνουργήματα.

↑ Επιστροφή στην αρχή


5 — Εγκατάσταση του Maven

Το Maven χρειάζεται ένα ήδη εγκατεστημένο JDK (Java Development Kit), γιατί βασίζεται στον μεταγλωττιστή javac. Η μεταβλητή JAVA_HOME πρέπει να δείχνει σε αυτό το JDK.

Ανάλογα με το σύστημά σας:

ΣύστημαΕντολή εγκατάστασης
Windows (με Chocolatey)choco install maven
macOS (με Homebrew)brew install maven
Linux (Debian/Ubuntu)sudo apt install maven

Χειροκίνητη εγκατάσταση (όλες οι πλατφόρμες):

bash
# 1. Επαληθεύστε πρώτα ότι υπάρχει Java
java -version
# Πρέπει να εμφανίζει έκδοση 17+ για παράδειγμα

# 2. Ορισμός JAVA_HOME (παράδειγμα Linux/macOS)
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk

# 3. Λήψη του Maven από το maven.apache.org, αποσυμπίεση,
#    έπειτα προσθήκη του φακέλου bin/ στο PATH
export PATH=$PATH:/opt/apache-maven-3.9.6/bin

Στα Windows, το JAVA_HOME ρυθμίζεται στις «Μεταβλητές περιβάλλοντος». Σε Linux/macOS, προσθέστε τη γραμμή export στο ~/.bashrc ή στο ~/.zshrc ώστε να είναι μόνιμη.

↑ Επιστροφή στην αρχή


6 — Επαλήθευση της εγκατάστασης και πρώτο έργο

Μόλις εγκατασταθεί το Maven, επαληθεύουμε ότι λειτουργεί και δημιουργούμε έναν πρώτο σκελετό έργου.

bash
# Επαλήθευση της εγκατεστημένης έκδοσης
mvn -version

Τυπική έξοδος:

Apache Maven 3.9.6
Maven home: /opt/apache-maven-3.9.6
Java version: 17.0.9, vendor: Eclipse Adoptium

Για να δημιουργήσετε ένα κενό έργο που τηρεί τις συμβάσεις, χρησιμοποιείτε έναν αρχέτυπο (πρότυπο):

bash
# Δημιουργεί ένα τυπικό έργο «quickstart»
mvn archetype:generate \
  -DgroupId=com.exemple \
  -DartifactId=mon-app \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DinteractiveMode=false
ΕντολήΑποτέλεσμα
mvn -versionΕμφανίζει την έκδοση του Maven και της Java
mvn archetype:generateΔημιουργεί έργο από πρότυπο
mvn packageΚατασκευάζει το τεχνούργημα στο target/

Το πρώτο mvn είναι αργό: το Maven κατεβάζει τα δικά του πρόσθετα σε τοπική κρυφή μνήμη (~/.m2/repository). Οι επόμενες κατασκευές είναι πολύ ταχύτερες.

🔧 Μίνι-άσκηση — Γράψτε την εντολή που εμφανίζει την εγκατεστημένη έκδοση του Maven (και αυτή της Java).

✅ Δείτε μια λύση
bash
mvn -version

↑ Επιστροφή στην αρχή


7 — Κουίζ — Εισαγωγή στο Maven

Question 1 : Τι δηλώνει το αρχείο pom.xml σε ένα έργο Maven;

a) Τον κύριο πηγαίο κώδικα της εφαρμογής

b) Το Project Object Model: τη συνταγή που περιγράφει το έργο και την κατασκευή του

c) Το μεταγλωττισμένο αποτέλεσμα του έργου

d) Ένα αρχείο καταγραφών

💡 Δείτε τη λύση

Απάντηση: b) — Το pom.xml (Project Object Model) περιγράφει την ταυτότητα του έργου, τις εξαρτήσεις του και τον τρόπο κατασκευής του.


Question 2 : Πού περιμένει το Maven να βρει από προεπιλογή τον κύριο πηγαίο κώδικα;

a) code/

b) target/main

c) src/main/java

d) java/source

💡 Δείτε τη λύση

Απάντηση: c) — Κατά σύμβαση, ο κύριος κώδικας πηγαίνει στο src/main/java και οι δοκιμές στο src/test/java.


Question 3 : Τι σημαίνει «σύμβαση αντί για διαμόρφωση»;

a) Πρέπει να διαμορφώνετε τα πάντα ρητά

b) Το Maven χρησιμοποιεί λογικές προεπιλογές, μειώνοντας την απαραίτητη διαμόρφωση

c) Δεν μπορείτε ποτέ να αλλάξετε τη συμπεριφορά του Maven

d) Το Maven δεν έχει αρχείο διαμόρφωσης

💡 Δείτε τη λύση

Απάντηση: b) — Τηρώντας τις προεπιλεγμένες συμβάσεις, το pom.xml παραμένει ελάχιστο. Μπορείτε πάντα να επαναπροσδιορίσετε μια σύμβαση αν χρειαστεί.


Question 4 : Ποιος φάκελος παράγεται αυτόματα από το Maven και δεν πρέπει να εκδοσιολογείται;

a) src/main/java

b) src/test/java

c) target/

d) resources/

💡 Δείτε τη λύση

Απάντηση: c) — Το target/ περιέχει τις μεταγλωττισμένες κλάσεις και το τεχνούργημα· αναδημιουργείται σε κάθε κατασκευή και πρέπει να εμφανίζεται στο .gitignore.


Question 5 : Τι χρειάζεται το Maven για να λειτουργήσει;

a) Έναν διακομιστή ιστού

b) Ένα εγκατεστημένο JDK και ρυθμισμένο JAVA_HOME

c) Μια βάση δεδομένων

d) Node.js

💡 Δείτε τη λύση

Απάντηση: b) — Το Maven βασίζεται στον μεταγλωττιστή javac του JDK· το JAVA_HOME πρέπει να δείχνει σε αυτό το JDK.

↑ Επιστροφή στην αρχή


8 — Πρακτική — Δημιουργία και επιθεώρηση ενός έργου

Εκφώνηση

Επαληθεύστε την εγκατάσταση του Maven, δημιουργήστε ένα έργο «quickstart» με όνομα mon-app στην ομάδα com.exemple, κατασκευάστε το και εντοπίστε το παραγόμενο τεχνούργημα.


Διόρθωση — Αναμενόμενη ακολουθία εντολών

bash
# 1. Επαλήθευση Maven και Java
mvn -version

# 2. Δημιουργία του έργου από τον αρχέτυπο quickstart
mvn archetype:generate \
  -DgroupId=com.exemple \
  -DartifactId=mon-app \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DinteractiveMode=false

# 3. Είσοδος στο έργο και επιθεώρηση της δομής
cd mon-app
ls -R          # ή « tree » αν είναι διαθέσιμο

# 4. Κατασκευή του έργου
mvn package

# 5. Εντοπισμός του παραγόμενου τεχνουργήματος
ls target/

Αναμενόμενο αποτέλεσμα:

target/
├── classes/
├── mon-app-1.0-SNAPSHOT.jar   <-- το παραγόμενο τεχνούργημα
└── ...
BUILD SUCCESS

Η παραγόμενη δενδροειδής δομή πρέπει να περιέχει:

mon-app/
├── pom.xml
└── src/
    ├── main/java/com/exemple/App.java
    └── test/java/com/exemple/AppTest.java

Αν το mvn package εμφανίζει BUILD SUCCESS και ένα .jar εμφανίζεται στο target/, η αλυσίδα Maven είναι λειτουργική. Το επίθημα -SNAPSHOT δηλώνει έκδοση υπό ανάπτυξη (βλ. μάθημα 02).

↑ Επιστροφή στην αρχή


9 — Σύνοψη

Σημεία προς απομνημόνευση

  1. Το Maven είναι εργαλείο αυτοματοποίησης κατασκευής για Java: μεταγλωττίζει, δοκιμάζει, συσκευάζει και διαχειρίζεται εξαρτήσεις.
  2. Το pom.xml είναι η μοναδική συνταγή που περιγράφει το έργο και την κατασκευή του.
  3. Σύμβαση αντί για διαμόρφωση: οι προεπιλογές ελαχιστοποιούν όσα πρέπει να γράψετε.
  4. Τυπική δομή: src/main/java, src/test/java, src/main/resources, έξοδος στο target/.
  5. Το Maven απαιτεί JDK και JAVA_HOME· επαληθεύουμε με mvn -version.

Η συνέχεια

Μάθημα 02 — Το αρχείο pom.xml: λεπτομερής ανάλυση της συνταγής του Maven — συντεταγμένες του έργου, ιδιότητες και κληρονομιά γονέα.

↑ Επιστροφή στην αρχή


Με την επιφύλαξη παντός δικαιώματος. Οποιαδήποτε αναπαραγωγή, διάδοση, χρήση ή προσαρμογή αυτού του μαθήματος, εν όλω ή εν μέρει, απαγορεύεται αυστηρά χωρίς την προηγούμενη γραπτή άδεια του Dr. Haythem REHOUMA.

Μάθημα δημιουργημένο από τον Dr. Haythem REHOUMA — Ανάπτυξη και ανάπτυξη λύσεων δεδομένων