Προγραμματισμός

Τι είναι το Maven; Δημιουργία και διαχείριση εξάρτησης για Java

Το Apache Maven είναι ο ακρογωνιαίος λίθος της ανάπτυξης Java και το πιο χρησιμοποιημένο εργαλείο διαχείρισης κατασκευής για την Java. Το βελτιωμένο μοντέλο διαμόρφωσης που βασίζεται σε XML του Maven επιτρέπει στους προγραμματιστές να περιγράφουν γρήγορα ή να κατανοούν τα περιγράμματα οποιουδήποτε έργου που βασίζεται σε Java, γεγονός που καθιστά την έναρξη και την κοινή χρήση νέων έργων μια γρήγορη. Το Maven υποστηρίζει επίσης δοκιμαστική ανάπτυξη, μακροχρόνια συντήρηση έργων, και η δηλωτική διαμόρφωση και το ευρύ φάσμα προσθηκών το καθιστούν μια δημοφιλή επιλογή για CI / CD Αυτό το άρθρο είναι μια γρήγορη εισαγωγή στο Maven, συμπεριλαμβανομένου του Maven POM και της δομής καταλόγου, και εντολές για την κατασκευή του πρώτου έργου σας Maven.

Σημειώστε ότι η πιο πρόσφατη κυκλοφορία του Maven από αυτήν τη συγγραφή είναι το Maven 3.6.3.

Maven εναντίον Ant και Gradle

Το Maven δεν είναι το μοναδικό εργαλείο κατασκευής στο οικοσύστημα Java, αν και είναι το πιο δημοφιλές. Το Ant, μια προηγούμενη γενιά εργαλείου διαμόρφωσης που βασίζεται σε XML, στερείται τυποποιημένων πρακτικών και διαχείρισης εξάρτησης από το Maven, αλλά προσφέρει ευελιξία που δεν θα βρείτε στο Maven. Το Gradle είναι ένα νεότερο εργαλείο που τρέχει πάνω από το οικοσύστημα του Maven (χρησιμοποιώντας τα αποθετήρια του Maven), αλλά υποστηρίζει τη χρήση DSL με βάση το Groovy ή το Kotlin για διαμόρφωση. Και τα τρία είναι καλά εργαλεία κατασκευής από μόνα τους και το καθένα μπορεί να ενσωματωθεί σε μια διαδικασία CI / CD. Αυτό που έχει σημασία είναι να επιλέξετε το σωστό για τις ανάγκες σας και να μάθετε πώς να το χρησιμοποιείτε σωστά.

Πώς λειτουργεί ο Maven

Όπως πολλά υπέροχα εργαλεία, ο Maven παίρνει αυτό που κάποτε ήταν υπερβολικά περίπλοκο (διαμόρφωση κόλασης) και το απλοποιεί σε εύπεπτα μέρη. Το Maven αποτελείται από τρία συστατικά:

  • Το POM: Το αρχείο που περιγράφει ένα έργο Maven και τις εξαρτήσεις του.
  • Ο κατάλογος: Η τυποποιημένη μορφή για την περιγραφή ενός έργου Maven στο POM.
  • Αποθήκες: Όπου αποθηκεύεται και ανακαλύπτεται λογισμικό τρίτων.

Το Maven POM: Κάθε έργο Java που χρησιμοποιεί το Maven έχει ένα αρχείο POM (μοντέλο αντικειμένου έργου) στον ριζικό του κατάλογο. ο pom.xml περιγράφει τις εξαρτήσεις του έργου και σας λέει πώς να το φτιάξετε. (Εξαρτήσεις είναι λογισμικό τρίτων που απαιτείται από το έργο. Μερικά κοινά παραδείγματα είναι τα JUnit και JDBC. Ανατρέξτε στο Maven Central Repository για μια λίστα με όλα τα διαθέσιμα εργαλεία και τις δημοφιλείς εξαρτήσεις.)

Ο κατάλογος Maven: Ο κατάλογος Maven εφαρμόζει αυτό που είναι γνωστό ως σύμβαση σχετικά με τη διαμόρφωση, μια κομψή λύση στη διαμόρφωση κόλαση. Αντί να απαιτούν από τους προγραμματιστές να καθορίσουν τη διάταξη και να διαμορφώσουν τα στοιχεία για κάθε νέο έργο (όπως συνέβη με το makefile και Ant), ο Maven θεσπίζει μια κοινή δομή έργου και προσφέρει μια τυπική μορφή αρχείου για να περιγράψει πώς λειτουργεί. Απλά συνδέετε τις απαιτήσεις σας και το Maven καλεί εξαρτήσεις και διαμορφώνει το έργο για εσάς.

Κεντρικά αποθετήρια: Τέλος, το Maven χρησιμοποιεί κεντρικά αποθετήρια για να ανακαλύψει και να δημοσιεύσει πακέτα έργων ως εξαρτήσεις. Όταν αναφέρετε μια εξάρτηση στο έργο σας, το Maven θα το ανακαλύψει στο κεντρικό αποθετήριο, θα το κατεβάσει σε ένα τοπικό αποθετήριο και θα το εγκαταστήσει στο έργο σας. Τις περισσότερες φορές, όλα αυτά είναι αόρατα για εσάς ως προγραμματιστής.

Πρόσβαση στις εξαρτήσεις του Maven

Από προεπιλογή, το Maven επιλύει εξαρτήσεις από το Maven Central Repository. Μια κοινή εναλλακτική λύση είναι το JCenter, το οποίο διαθέτει ένα ευρύτερο σύνολο διαθέσιμων πακέτων. Οι οργανισμοί δημοσιεύουν και φιλοξενούν εσωτερικά αποθετήρια, τα οποία μπορούν να είναι δημόσια ή ιδιωτικά. Για να αποκτήσετε πρόσβαση σε ένα αποθετήριο, καθορίζετε τη διεύθυνση URL του στο Maven POM ή μπορείτε να δώσετε εντολή στο Maven να κοιτάξει σε άλλα αποθετήρια.

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

Το Maven είναι ένα έργο Java, οπότε πριν το εγκαταστήσετε θα πρέπει να έχετε εγκαταστήσει το JDK στο περιβάλλον ανάπτυξης. (Δείτε "Τι είναι το JDK; Εισαγωγή στο Java Development Kit" για περισσότερα σχετικά με τη λήψη και εγκατάσταση του JDK.)

Μόλις ρυθμίσετε το περιβάλλον ανάπτυξης Java, μπορείτε να εγκαταστήσετε το Maven με λίγα μόνο βήματα:

  1. Κατεβάστε την τελευταία έκδοση του Maven (Maven 3.6.3 από αυτό το γράψιμο).
  2. Εξαγάγετε το apache.maven .zip αρχείο σε βολικό μέρος.
  3. Τοποθετήστε αυτό το αρχείο στη διαδρομή σας. Για παράδειγμα, σε σύστημα Unix ή Linux: εξαγωγή PATH = $ PATH: / σπίτι / maven /.

Θα πρέπει τώρα να έχετε πρόσβαση στο mvn εντολή. Τύπος mvn -v για να βεβαιωθείτε ότι έχετε εγκαταστήσει με επιτυχία το Maven.

Το Maven POM

Η ρίζα κάθε έργου Maven είναι το pom.xml αρχείο. Παρά τη φήμη του ότι είναι κουραστική, η XML λειτουργεί πραγματικά πολύ καλά για αυτήν την περίπτωση χρήσης. Το POM του Maven είναι ευανάγνωστο και αποκαλύπτει μεγάλο μέρος του τι συμβαίνει σε ένα έργο. (Εάν έχετε εργαστεί με JavaScript, το pom.xml είναι παρόμοιο σκοπό με τους κόμβους NPM package.json αρχείο.)

Η λίστα 1 δείχνει ένα πολύ απλό Maven pom.xml.

Λίστα 1. Simple Maven POM

   4.0.0 com.javaworld what-is-maven 1.0-SNAPSHOT Simple Maven Project jar junit junit 4.12 τεστ 

Κατανόηση του Maven POM

Μόλις το καταλάβετε, το POM δεν είναι μυστηριώδες. Για να ξεκινήσετε, μπορείτε να περιηγηθείτε στο προοίμιο XML, το οποίο αναφέρεται απλώς στο επίσημο σχήμα POM. Παρατηρήστε το XML ξεκινώντας από μοντέλοVersion, ωστόσο. Αυτό λέει στον Maven ποια έκδοση του POM θα χρησιμοποιήσει, στην περίπτωση αυτή Maven POM 4.0.0.

Στη συνέχεια, έχετε ομάδαId, artifactId, και εκδοχή. Μαζί, αυτά τα τρία χαρακτηριστικά προσδιορίζουν μοναδικά κάθε πόρο που διαχειρίζεται το Maven στο αποθετήριο. Αυτά τα χαρακτηριστικά στο επάνω μέρος του αρχείου περιγράφουν το έργο σας στο Maven.

Τώρα, ρίξτε μια ματιά στο εξαρτήσεις ενότητα του POM, όπου περιγράφουμε τις εξαρτήσεις του έργου. Σε αυτήν την περίπτωση έχουμε τραβήξει μια μόνο εξάρτηση μέχρι τώρα, JUnit. Παρατηρήστε ότι το JUnit περιγράφεται επίσης από την άποψη του ομάδαId, artifactId, και εκδοχή.

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

Φιλοξενία του έργου σας σε ένα αποθετήριο Maven

Λάβετε υπόψη ότι το POM καθορίζει ό, τι χρειάζεται το έργο σας, αλλά περιγράφει επίσης το έργο σας ως πιθανή εξάρτηση. Εάν δημιουργείτε ένα έργο που θα αποτελεί εξάρτηση - ας πούμε, δημιουργώντας μια βιβλιοθήκη για χρήση άλλων έργων - θα πρέπει να το διαθέσετε με έναν από τους τέσσερις τρόπους:

  1. Κάντε το διαθέσιμο τοπικά.
  2. Δημοσίευση σε απομακρυσμένο αποθετήριο ιδιωτικής διαχείρισης.
  3. Δημοσίευση σε ιδιωτικό αποθετήριο που βασίζεται σε σύννεφο.
  4. Δημοσίευση σε δημόσιο αποθετήριο όπως το Maven Central.

Στην πρώτη περίπτωση, δεν χρησιμοποιείτε καθόλου απομακρυσμένο αποθετήριο. Αντ 'αυτού, άλλοι προγραμματιστές θα κατεβάσουν και θα εγκαταστήσουν το έργο σας τοπικά στο Maven repo τους, χρησιμοποιώντας το εγκατάσταση mvn εντολή.

Στη δεύτερη περίπτωση, χρησιμοποιείτε ένα φιλοξενούμενο αποθετήριο Maven, χρησιμοποιώντας έναν ιδιωτικό ελεγχόμενο διακομιστή για τη δημοσίευση και λήψη εξαρτήσεων. Για αυτό χρειάζεστε έναν διαχειριστή αποθετηρίου, όπως το Apache Archiva.

Μια νεότερη εναλλακτική λύση είναι να χρησιμοποιήσετε ένα ιδιωτικό απομακρυσμένο repo, αλλά να βασιστείτε σε μια υπηρεσία που βασίζεται σε σύννεφο για να το διαχειριστείτε, για παράδειγμα Cloudsmith. Αυτό δίνει το πλεονέκτημα των εξ αποστάσεως φιλοξενούμενων που δεν φιλοξενούνται σε διακομιστή repo. Αυτή η υπηρεσία είναι φυσικά έναντι αμοιβής.

Τέλος, ένα μικρό ποσοστό έργων θα καταλήξει στο Central Maven Repository ή στο JCenter, τα οποία προορίζονται για ευρέως χρησιμοποιούμενα, δημόσια πακέτα. Εάν δημιουργείτε μια εξάρτηση ανοιχτού κώδικα για χρήση από άλλους, θα χρειαστείτε ένα από αυτά τα κεντρικά αποθετήρια για να κάνετε τη δουλειά σας διαθέσιμη στον κόσμο.

  • Μάθετε περισσότερα σχετικά με τη φιλοξενία του έργου σας σε ένα αποθετήριο Maven και λάβετε μια λίστα με τα διαθέσιμα αποθετήρια.
  • Δείτε την επίσημη τεκμηρίωση του Maven σχετικά με το Maven Release Plugin, που χρησιμοποιείται για την προετοιμασία και τη διαχείριση λογισμικού που δημοσιεύεται σε ένα αποθετήριο Maven.

Δημιουργήστε το πακέτο Maven

Εάν δημιουργήσετε το pom.xml από την Καταχώριση 1 και να το βάλετε σε έναν κατάλογο, θα μπορείτε να εκτελέσετε εντολές Maven εναντίον του. Το Maven έχει πολλές εντολές και περισσότερες είναι διαθέσιμες μέσω plugin, αλλά πρέπει να γνωρίζετε μόνο μια χούφτα για να ξεκινήσετε.

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

Πεδίο εξάρτησης

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

Ένα άλλο κοινό πεδίο είναι υπό την προϋπόθεση, το οποίο λέει στο πλαίσιο ότι η εξάρτηση παρέχεται από το περιβάλλον χρόνου εκτέλεσης. Αυτό φαίνεται συχνά με το Servlet JARS κατά την ανάπτυξη σε servlet container, καθώς το container θα παρέχει αυτά τα JARS. Δείτε την τεκμηρίωση του Apache Maven για μια πλήρη λίστα με τα πεδία εξάρτησης του Maven.

Δομή καταλόγου Maven

Όταν ολοκληρωθεί η εντολή, παρατηρήστε ότι ο Maven έχει δημιουργήσει ένα /στόχος Ευρετήριο. Αυτή είναι η τυπική τοποθεσία για την παραγωγή του έργου σας. Οι εξαρτήσεις που έχετε κατεβάσει θα βρίσκονται στο /στόχος κατάλογο, μαζί με τα μεταγλωττισμένα αντικείμενα της εφαρμογής σας.

Στη συνέχεια θέλετε να προσθέσετε ένα αρχείο Java, το οποίο θα τοποθετήσετε στο Maven src / Ευρετήριο. Δημιουργώ ένα /src/main/java/com/javaworld/Hello.java αρχείο, με το περιεχόμενο της καταχώρισης 2.

Λίστα 2. Hello.java

 com.javaworld δημόσια τάξη Γεια σας {public static void main (String [] args) {System.out.println ("Hello, JavaWorld"); }} 

ο / src Η διαδρομή είναι το τυπικό σημείο για τα αρχεία προέλευσης του έργου σας. Τα περισσότερα έργα τοποθετούν τα κύρια αρχεία τους / src / κύρια /, με τα αρχεία Java να μπαίνουν στο classpath κάτω /Ιάβα. Επιπλέον, εάν θέλετε να συμπεριλάβετε στοιχεία που είναι δεν κώδικα, όπως αρχεία ρυθμίσεων ή εικόνες, μπορείτε να χρησιμοποιήσετε / src / main / πόροι. Τα στοιχεία σε αυτήν τη διαδρομή θα προστεθούν στο κύριο classpath. Τα δοκιμαστικά αρχεία μπαίνουν / src / test / java.

Για να αναθεωρήσετε, ακολουθούν ορισμένα βασικά μέρη μιας δομής έργου Maven (όπως ορίζεται από το Maven Standard Directory Structure):

Βασικά μέρη της δομής καταλόγου Maven Standard

pom.xmlΤο αρχείο περιγραφής έργου
/ src / main / javaΘέση των αρχείων προέλευσης
/ src / main / πόροιΘέση μη πηγών στοιχείων
/ src / test / javaΘέση των αρχείων προέλευσης δοκιμής
/στόχοςΘέση της εξόδου κατασκευής

Διαχείριση του έργου σας Maven

ο πακέτο mvn Η εντολή δίνει εντολή στον Maven να ομαδοποιήσει το έργο. Εκδώστε αυτήν την εντολή όταν είστε έτοιμοι να συλλέξετε όλα τα αρχεία του έργου σας σε ένα μέρος. Θυμηθείτε ότι στο αρχείο POM για αυτό το έργο, ορίζουμε τον τύπο συσκευασίας ως δοχείο, έτσι αυτή η εντολή λέει στον Maven να συσκευάζει τα αρχεία της εφαρμογής σε ένα JAR.

Το Maven προσφέρει μια ποικιλία πρόσθετων επιλογών για τον έλεγχο του τρόπου διαχείρισης του JAR, είτε πρόκειται για λιπαρό είτε λεπτό JAR, και για τον καθορισμό ενός εκτελέσιμου mainclass. Δείτε τα έγγραφα Maven για να μάθετε περισσότερα σχετικά με τη διαχείριση αρχείων στο Maven.

Αφού ομαδοποιήσετε ένα έργο, πιθανότατα θέλετε να εκδώσετε ένα εγκατάσταση mvn. Αυτή η εντολή ωθεί το έργο στο τοπικό αποθετήριο Maven. Μόλις βρεθεί στο τοπικό αποθετήριο, είναι διαθέσιμο σε άλλα έργα του Maven στο τοπικό σας σύστημα. Αυτό είναι χρήσιμο για σενάρια ανάπτυξης όπου εσείς ή / και η ομάδα σας δημιουργείτε εξάρτηση JAR που δεν έχουν ακόμη δημοσιευτεί σε κεντρικό αποθετήριο.

Πρόσθετες εντολές Maven

Εισαγω δοκιμή mvn όταν είστε έτοιμοι να εκτελέσετε δοκιμές μονάδας που έχετε ορίσει στο / src / java / δοκιμή Ευρετήριο.

Εισαγω μεταγλώττιση mvn όταν είστε έτοιμοι να μεταγλωττίσετε τα αρχεία τάξης του έργου. Εάν εκτελείτε μια εγκατάσταση hot-deploy, αυτή η εντολή ενεργοποιεί το πρόγραμμα φόρτωσης τάξης ανάπτυξης. (Το hot-deploy εργαλείο - όπως το Spring Boot's mvn spring-boot: εκτέλεση εντολή - θα παρακολουθεί τα αρχεία κλάσης για αλλαγές και η μεταγλώττιση θα προκαλέσει τη σύνταξη των αρχείων προέλευσης και η εφαρμογή που εκτελείται θα αντικατοπτρίζει αυτές τις αλλαγές.)

Έναρξη νέου έργου: Αρχέτυπα στο Maven και την Άνοιξη

ΕΝΑ Αρχέτυπο Maven είναι ένα πρότυπο για την εκκίνηση νέων έργων που βασίζονται σε μια ποικιλία προκαθορισμένων ρυθμίσεων. Κάθε αρχέτυπο προσφέρει προσυσκευασμένες εξαρτήσεις, όπως για ένα έργο Java EE ή Java web application. Μπορείτε επίσης να δημιουργήσετε ένα νέο αρχέτυπο από ένα υπάρχον έργο και, στη συνέχεια, να το χρησιμοποιήσετε για να δημιουργήσετε γρήγορα νέα έργα βάσει αυτών των προκαθορισμένων διατάξεων. Δείτε τα έγγραφα του Maven για να μάθετε περισσότερα σχετικά με τα αρχέτυπα του Apache Maven.

Το πλαίσιο Spring, το οποίο λειτουργεί καλά με το Maven, προσφέρει πρόσθετες, εξελιγμένες δυνατότητες για τον αποκλεισμό νέων έργων. Για παράδειγμα, το Spring Initializr είναι ένα εργαλείο που σας επιτρέπει να ορίσετε πολύ γρήγορα τα στοιχεία που θέλετε σε μια νέα εφαρμογή. Το Initializr δεν είναι ένα αρχέτυπο Maven, αυτό καθαυτό, αλλά εξυπηρετεί τον ίδιο σκοπό της δημιουργίας μιας διάταξης έργου βάσει αρχικών προδιαγραφών. Από το Initializr, μπορείτε να πληκτρολογήσετε αρχέτυπος mvn: δημιουργία και σαρώστε τις επιλογές για να βρείτε ένα αρχέτυπο που είναι κατάλληλο για αυτό που χτίζετε.

Προσθήκη εξαρτήσεων