Apache Maven

ΕΝΟΤΗΤΑ 2 - Maven Settings Explanation

image description

ΕΝΟΤΗΤΑ 2 - Maven Settings Explanation

Στην σημερινή δωρεάν ενότητα Apache Maven, θα δούμε που ακριβώς αποθηκεύονται όλες οι ρυθμίσεις του, τι σημαίνουν και πότε μπορούμε να τις χρησιμοποιήσουμε, πως μπορούμε να λάβουμε βοήθεια για τις εντολές του Apache Maven από το command prompt, και πως μπορούμε να βελτιώσουμε την απόδοση του ίδιου του Apache Maven όταν δημιουργούμε μεγάλα Java projects. Έχουμε πολλά θέματα να αναλύσουμε οπότε ας ξεκινήσουμε την θεωρία μας.

Όπως έχουμε ήδη δει στην ΕΝΟΤΗΤΑ 1 (https://kassapoglou.github.io/maven/learning-maven-unit1.html) , για να ελέγξουμε την σωστή λειτουργία του Maven όπως και την έκδοση της Java που χρησιμοποιεί εκτελούμε την εντολή mvn -version.

Δωρεάν Μαθήματα και Σεμινάρια Apache Maven

Εάν θέλαμε να βρούμε όλες τις διαθέσιμες εντολές που μπορούμε να εκτελέσουμε από το command prompt δεν έχουμε παρά να εκτελέσουμε την εντολή mvn -h ή mvn -help. Η συγκεκριμένη εντολή, όταν εκτελεστεί, θα μας παρουσιάσει μια λίστα με όλες τις επιλογές που μπορούμε να προσθέσουμε μετά το mvn. Αν πάτε προς το τέλος της λίστας, θα δείτε μάλιστα ότι η εντολή mvn -version είναι μια από τις διαθέσιμες επιλογές.

Δωρεάν Μαθήματα και Σεμινάρια Apache Maven

Τα βήματα εγκατάστασης του Apache Maven που έχουμε ακολουθήσει μέχρι αυτή την στιγμή, είναι αρκετά για να μπορέσουμε να χτίσουμε Maven projects και να προχωρήσουμε στην θεωρία μας. Όμως σε επιχειρήσεις όπου τα projects είναι αρκετά μεγάλα σε μέγεθος κώδικα αλλά και με μεγαλύτερες απαιτήσεις σε ασφάλεια, ίσως υπάρχει ανάγκη παροχής επιπρόσθετων ρυθμίσεων. Που βρίσκονται όμως αυτές οι έξτρα ρυθμίσεις και πως ονομάζονται?

Υπάρχουν δύο ειδών τοποθεσίες που μπορούμε να βρούμε τις ίδιες ρυθμίσεις:

  • η πρώτη είναι στο αρχείο settings.xml το οποίο βρίσκεται μέσα στο conf φάκελο της εγκατάστασης του Maven. Αυτές οι ρυθμίσεις εφαρμόζονται σε όλα τα maven projects για όλους τους χρήστες και για αυτό θεωρούνται global. Δωρεάν Μαθήματα και Σεμινάρια Apache Maven

  • Και η δεύτερη είναι πάλι σε ένα αρχείο με το όνομα settings.xml αλλά μέσα στο φάκελο .m2 του user directory. Αυτές οι ρυθμίσεις είναι προσωπικές για τον συγκεκριμένο χρήστη για αυτό και ονομάζονται user settings. Δωρεάν Μαθήματα και Σεμινάρια Apache Maven

Το Maven λοιπόν θα ψάξει και στις δύο αυτές τοποθεσίες για να βρει το αρχείο settings.xml. Αν υπάρχουν και τα δύο αρχεία και to καθένα περιέχει διαφορετική ρύθμιση για κάποια επιλογή του προφίλ του Maven, θα υπερισχύσει το settings.xml αρχείο του χρήστη, δηλαδή εκείνο που βρίσκεται στο .m2 φάκελο.

Θα έχετε ήδη παρατηρήσει ότι εκτός από το αρχείο settings.xml μέσα στο φάκελο .m2 υπάρχουν και άλλοι φάκελοι όπως π.χ ο repository που περιέχει όλες τις βιβλιοθήκες τις οποίες χρειάζονται τα project μας. Θα αναφερθούμε σε αυτό το φάκελο σε μελλοντική ενότητα οπότε τώρα δεν προχωρήσουμε να μιλήσουμε για τα Jar αρχεία που περιέχει. Αυτό που μας ενδιαφέρει είναι να γνωρίζουμε την τοποθεσία του έτσι ώστε μπορούμε να βρούμε τις βιβλιοθήκες αλλά και το settings.xml αρχείο αν και εφόσον θέλουμε να το αλλάξουμε. Για να βρούμε λοιπόν το που βρίσκεται το .m2/repository directory δεν έχουμε παρά να τρέξουμε την εντολή:

mvn help:evaluate -Dexpression=settings.localRepository

Δωρεάν Μαθήματα και Σεμινάρια Apache Maven

Προσέξτε πριν από το help δεν υπάρχει παύλα (-). Θα μιλήσουμε αργότερα επίσης και το τι σημαίνει η άνω κάτω τελεία ( : ) και γιατί βάζουμε δύο εντολές μαζί. Για τώρα, συγκεντρωθείτε μόνο στο γεγονός ότι ψάχνουμε να βρούμε το settings.xml αρχείο σε δύο τοποθεσίες.

Παρεμπιπτόντως, αν έχετε προσπαθήσει να βρείτε το .m2 φάκελο και δεν τον βρήκατε, είναι επειδή χρειάζεται να τρέξετε μια οποιαδήποτε maven εντολή πρώτα για να δημιουργηθεί.

Επίσης, το αρχείο settings.xml μέσα στον φάκελλο .m2 δεν δημιουργείται αυτόματα. Δημιουργείστε ένα αρχείο μόνοι σας, ονομάστε το settings.xml και αντιγράψτε το template που σας παρέχω εδώ. Καλό θα ήταν όταν διαχειρίζεστε τέτοιου είδους αρχεία να χρησιμοποιείται έναν editor όπως notepad++.

Στην ουσία έχουμε τις εξής παραμέτρους που μπορούμε να τροποποιήσουμε

  • localRepository : Αυτή είναι η τοποθεσία στην οποία δημιουργείται ο repository φάκελος ο οποίος περιέχει όλες τις βιβλιοθήκες που χρειάζονται τα project μας. Με βάση το παράδειγμα, θα μπορούσαμε να ορίσουμε μια καινούργια τοποθεσία. Στο δικό μου settings.xml, ορίζω αυτό το αρχείο να είναι μια τοποθεσία διαφορετική από το C:\ drive. Ο λόγος που το κάνω αυτός είναι βασικά πρακτικός. Ο φάκελος αυτός μπορεί να μεγαλώσει κατά πολύ σε μέγεθος όταν κατεβάζουμε καινούργιες βιβλιοθήκες κάθε φορά. Δωρεάν Μαθήματα και Σεμινάρια Apache Maven

  • InteractiveMode : Η προκαθορισμένη τιμή για αυτή την μεταβλητή είναι true. Αυτό σημαίνει ότι όταν δημιουργούμε ένα καινούργιο Maven Project μέσα από το command prompt το Maven θα μας ρωτήσει να ορίσουμε κάποια ονόματα όπως το όνομα του project, το όνομα του πακέτου κτλ. Αν ορίσουμε την τιμή να είναι false τότε το Maven θα χρησιμοποιήσει τις δικές του προκαθορισμένες τιμές χωρίς να μας ρωτήσει.
  • offline : Όταν χρησιμοποιούμε το Maven για πρώτη φορά σε ένα project, θα προσπαθήσει να κατεβάσει από το δίκτυο όλες τις βιβλιοθήκες που χρειάζεται το project για να γίνει compile και να εκτελεστεί σωστά. Αν τώρα θέσουμε αυτή την παράμετρο να είναι true, τότε από την επόμενη φορά που θα κάνουμε build το project μας, το Maven δεν θα προσπαθήσει να ενωθεί στο δίκτυο αλλά θα τρέξει σε offline mode. Αυτό σημαίνει ότι θα χρησιμοποιήσει τις βιβλιοθήκες που ήδη έχει κατεβάσει και έχει αποθηκεύσει στο repository φάκελο. Αυτό ίσως βολεύει μερικές φορές, αλλά αν υπάρχουν αναβαθμίσεις στις βιβλιοθήκες που χρησιμοποιούμε δεν θα ενημερωθούμε για αυτές. Για αυτό πρέπει να χρησιμοποιούμε το offline για συγκεκριμένους λόγους και για μικρό χρονικό διάστημα.
  • servers : Το Maven έχει την δυνατότητα να ενώνεται με πολλούς και διαφορετικής χρήσης servers όπως π.χ Git και Jenkins. Με την παράμετρο servers μπορούμε να ορίσουμε το username και το password που χρειάζεται το Maven για να ενωθεί με αυτούς τους servers. Αυτό είναι μια πολύ συνηθισμένη πρακτική στον σημερινό κόσμο του προγραμματισμού μιας και κυριαρχεί η έννοια του CI/CD όπου ορίζουμε ένα production pipeline. Για αυτά θα μιλήσουμε αργότερα οπότε μην σας απασχολούν τώρα.
  • mirrors : Πολλές φορές, για να επισπεύσουμε την διαδικασία χτισίματος ενός project, αντί να κατεβάζουμε συνέχεια τις βιβλιοθήκες από το Ίντερνετ, τις αντιγράφουμε τοπικά στο εταιρικό μας δίκτυο και ορίζουμε στο Maven, μέσα από την παράμετρο mirrors, που μπορεί να βρει το Maven αυτές τις βιβλιοθήκες στο τοπικό δίκτυο.
  • proxies : Αν και εφόσον υπάρχει proxy στην εταιρεία, τότε μέσα από την παράμετρο proxies ορίζουμε όλες τις πληροφορίες που είναι απαραίτητες έτσι ώστε το Maven να μπορεί να ενωθεί στο Ίντερνετ.

Πριν κλείσουμε την σημερινή ενότητα, θα ήθελα να αναφερθούμε σε ένα κοινό φαινόμενο που παρατηρείται όταν χτίζουμε ένα πολύ μεγάλο java project που απαιτεί πάρα πολλές εξωτερικές βιβλιοθήκες επιπλέον σε αυτές που προσφέρει η Java – η έλλειψη μνήμης με αποτέλεσμα να μην μπορεί το Maven να ολοκληρώσει την διαδικασία του.

Εξ ορισμού, μετά την εγκατάστασή του, το Maven θα χρησιμοποιήσει το πολύ 512 ΜΒ μνήμης, με μικρότερο όριο τα 256 MB (-Xms256m, -Xmx512m). Η μνήμη αυτή που αφιερώνουμε στο Maven είναι πρακτικά αποτελεσματική μόνο για μικρά projects. Σε μεγάλα έργα, το Maven, αν και θα χρησιμοποιήσει όλη την 512MB μνήμη δεν θα του είναι αρκετή για να ανταποκριθεί στο action που εκτελεί οπότε θα σταματήσει να λειτουργεί και θα εμφανίσει το java.lang.OutOfMemoryError.

Για να αποφύγουμε αυτές τις καταστάσεις, αρκεί να δώσουμε λίγο περισσότερη μνήμη στο Maven συνήθως όχι λιγότερο από 1024ΜΒ. Υπάρχουν δύο τρόποι να το κάνουμε:

  • Ο πρώτος τρόπος είναι να ανοίξουμε ένα command prompt και να ορίσουμε μια καινούργια τιμή για το heap size του Maven γράφοντας τη πιο κάτω εντολή

    set MAVEN_OPTS=-Xmx1024m -XX:MaxPermSize=128m

  • Αν όμως θέλετε μια πιο σταθερή λύση μπορούμε να δημιουργήσουμε μια ακόμη μεταβλητή στα Environment Variables των Windows 10 και να δώσουμε το όνομα MAVEN_OPTS και την τιμή -Xmx1024m -XX:MaxPermSize=128m Δωρεάν Μαθήματα και Σεμινάρια Apache Maven

    Δωρεάν Μαθήματα και Σεμινάρια Apache Maven

Από την επόμενη ενότητα θα αρχίσουμε να βλέπουμε πως να δημιουργήσουμε το πρώτο μας Maven project και ποιες είναι οι εντολές που έχουμε στην διάθεση μας για να το χτίσουμε και να το τρέξουμε.

Γίνε Χορηγός στη Γνώση

ΕΙΣΗΓΗΤΗΣ

Merry Jhonson

Μιχάλης Κασάπογλου

Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.

loader