Η ενότητα αυτή περιγράφει τον τρόπο ορισμού της διαδρομής δόμησης Java. Η διαδρομή δόμησης είναι η διαδρομή κλάσεων που χρησιμοποιείται για τη δόμηση ενός έργου Java (IJavaProject).
Μια διαδρομή κλάσεων είναι απλά ένας πίνακας με καταχωρήσεις διαδρομών κλάσεων (IClassPathEntry) που περιγράφει τα είδη που είναι διαθέσιμα. Τα είδη μπορούν να εμφανίζονται σε πρωτογενή ή δυαδική μορφή και η σειρά των καταχωρήσεων στη διαδρομή ορίζει τη σειρά αναζήτησης για την ανάλυση των ειδών κατά τη διάρκεια μιας διεργασίας δόμησης.
Η διαδρομή δόμησης Java αντικατοπτρίζεται στη δομή ενός στοιχείου έργου Java. Μπορείτε να υποβάλετε ερώτημα σε ένα έργο για τις αφετηρίες τμημάτων πακέτων του (IPackageFragmentRoot). Κάθε καταχώρηση διαδρομής κλάσης αντιστοιχίζεται σε μία ή περισσότερες αφετηρίες τμημάτων πακέτων, κάθε μία από τις οποίες περιέχει ένα σύνολο τμημάτων πακέτων.
Η συζήτηση για τη διαδρομή δόμησης δεν περιλαμβάνει τη διαδρομή του περιβάλλοντος εκτέλεσης Java, η οποία μπορεί να οριστεί ξεχωριστά από τη διαδρομή δόμησης. (Ανατρέξτε στην ενότητα Εκτέλεση κώδικα Java για περισσότερες πληροφορίες σχετικά με τη διαδρομή κλάσεων περιβάλλοντος εκτέλεσης.)
Μπορείτε να αλλάξετε μέσω προγραμματισμού μια διαδρομή δόμησης έργου,
χρησιμοποιώντας τη
setRawClasspath
στο αντίστοιχο στοιχείο έργου Java. Ο παρακάτω κώδικας ορίζει
τη διαδρομή κλάσεων για έναν πόρο έργου:
IProject project = ... // get some project resource
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] newClasspath = ...;
javaProject.setRawClasspath(newClasspath, someProgressMonitor);
(Σημείωση: Η χρήση του όρου "αδιαμόρφωτη" διαδρομή κλάσεων έχει ως στόχο να δώσει έμφαση στο γεγονός ότι οι μεταβλητές που χρησιμοποιούνται για την περιγραφή των θέσεων καταχωρήσεων δεν έχουν αναλυθεί.)
Η διαδρομή κλάσεων Java είναι μόνιμα αποθηκευμένη σε ένα αρχείο με το όνομα ".classpath" στη δομή αρχείων του έργου. Σκοπός του αρχείου αυτού είναι να παρέχει έναν τρόπο κοινής χρήσης των ρυθμίσεων διαδρομής δόμησης Java με άλλες θέσεις του χώρου αποθήκευσης πρωτογενούς κώδικα. Συγκεκριμένα, το αρχείο αυτό θα πρέπει να τροποποιείται με μη αυτόματο τρόπο, καθώς υπάρχει κίνδυνος να καταστραφεί.
Οι καταχωρήσεις διαδρομής κλάσεων μπορούν να οριστούν με τη χρήση μεθόδων κατασκευής που ορίζονται στη JavaCore. Στις καταχωρήσεις διαδρομής κλάσεων μπορούν να αναφέρονται τα εξής:
Παρακάτω δίνεται ένα παράδειγμα καταχώρησης διαδρομής κλάσεων, που δηλώνει το φάκελο πρωτογενούς κώδικα "src" του έργου "MyProject": IClassPathEntry srcEntry = JavaCore.newSourceEntry(new Path("/MyProject/src"));
Παρακάτω δίνεται ένα παράδειγμα καταχώρησης διαδρομής κλάσεων, που δηλώνει το φάκελο αρχείων κλάσεων "lib" του έργου "MyProject":
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("/MyProject/lib"),
null, //no source
null, //no source
false); //not exported
Για την παρακάτω καταχώρηση διαδρομής κλάσεων έχει προσαρτηθεί πρωτογενής κώδικας:
IClassPathEntry libEntry = JavaCore.newLibraryEntry(
new Path("d:/lib/foo.jar"), // library location
new Path("d:/lib/foo_src.zip"), //source archive location
new Path("src"), //source archive root path
true); //exported
Η διαδρομή αφετηρίας αρχείου αποθήκευσης πρωτογενούς κώδικα περιγράφει τη θέση της αφετηρίας μέσα στο αρχείο αποθήκευσης του κώδικα. Αν έχει την τιμή "null", η αφετηρία του αρχείου αποθήκευσης θα συνάγεται δυναμικά.
Η παρακάτω καταχώρηση διαδρομής κλάσεων δηλώνει ένα προαπαιτούμενο έργο "MyFramework".
IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true); //exported
Είναι δυνατή η καταχώρηση μιας αυτόματης λειτουργίας απόδοσης αρχικών τιμών στη μεταβλητή διαδρομής κλάσεων η οποία καλείται μέσω του σημείου επέκτασης org.eclipse.jdt.core.classpathVariableInitializer κατά την εκκίνηση του χώρου εργασίας.
Η παρακάτω καταχώρηση διαδρομής κλάσεων δηλώνει μια βιβλιοθήκη της οποίας η θέση διατηρείται στη μεταβλητή "HOME". Η προσάρτηση πρωτογενούς κώδικα ορίζεται με τη χρήση των μεταβλητών "SRC_HOME" και "SRC_ROOT" :
IClassPathEntry varEntry = JavaCore.newVariableEntry(
new Path("HOME/foo.jar"), // library location
new Path("SRC_HOME/foo_src.zip"), //source archive location
new Path("SRC_ROOT"), //source archive root path
true); //exported
JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null); // no progress monitor
Είναι δυνατή η καταχώρηση μιας αυτόματης λειτουργίας απόδοσης αρχικών τιμών στη μεταβλητή διαδρομής κλάσεων η οποία καλείται αργά μέσω του σημείου επέκτασης org.eclipse.jdt.core.classpathContainerInitializer όταν απαιτείται η σύνδεση της θέσης υποδοχής.
Η παρακάτω καταχώρηση διαδρομής κλάσεων δηλώνει μια θέση υποδοχής βιβλιοθήκης κλάσεων συστήματος:
IClassPathEntry varEntry = JavaCore.newContainerEntry(
new Path("JDKLIB/default"), // container 'JDKLIB' + hint 'default'
false); //not exported
JavaCore.setClasspathContainer(
new Path("JDKLIB/default"),
new IJavaProject[]{ myProject }, // value for 'myProject'
new IClasspathContainer[] {
new IClasspathContainer() {
public IClasspathEntry[] getClasspathEntries() {
return new IClasspathEntry[]{
JavaCore.newLibraryEntry(new Path("d:/rt.jar"), null, null, false);
};
}
public String getDescription() { return "Basic JDK library container"; }
public int getKind() { return IClasspathContainer.K_SYSTEM; }
public IPath getPath() { return new Path("JDKLIB/basic"); }
}
},
null);
Μια καταχώρηση πόρου διαδρομής κλάσεων μπορεί να αντιστοιχίζεται σε ένα μοτίβο εξαίρεσης, που αποκρύπτει ορισμένους πόρους ενός φακέλου πρωτογενούς κώδικα από μια διαδρομή κλάσεων. Η χρήση ενός μοτίβου επιτρέπει σε συγκεκριμένα τμήματα της διακλάδωσης πόρου να διαχωρίζονται με φιλτράρισμα. Κάθε διαδρομή μοτίβου εξαίρεσης σχετίζεται με την καταχώρηση της διαδρομής κλάσεων και χρησιμοποιεί ένα μηχανισμό μοτίβου παρόμοιο με το Ant. Τα μοτίβα εξαίρεσης μπορούν να χρησιμοποιηθούν για τον προσδιορισμό ένθετων φακέλων πρωτογενούς κώδικα, όταν το εξωτερικό μοτίβο εξαιρεί το εσωτερικό μοτίβο.
Ανατρέξτε στην περιγραφή της μεθόδου getExclusionPatterns για περισσότερες πληροφορίες σχετικά με τα μοτίβα εξαίρεσης.
Το API isOnClasspath του έργου Java ελέγχει τόσο το μοτίβο συμπερίληψης όσο και το μοτίβο εξαίρεσης πριν προσδιορίσει αν ένας συγκεκριμένος πόρος βρίσκεται στη διαδρομή κλάσεων.
Παρατηρήσεις:
IPath sourceFolder = new Path("/MyProject/src"); IPath outputLocation = sourceFolder.append("bin"); IClassPathEntry srcEntry = JavaCore.newSourceEntry( sourceFolder, // source folder location new Path[] { outputLocation }, // excluded nested folder outputLocation); // output location
Μια καταχώρηση προέλευσης διαδρομής κλάσεων μπορεί επίσης να αντιστοιχιστεί σε ένα μοτίβο συμπερίληψης, που ορίζει ρητά τους πόρους που θα είναι ορατοί στη διαδρομή κλάσεων. Όταν δεν προσδιορίζεται κανένα μοτίβο συμπερίληψης, η καταχώρηση προέλευσης συμπεριλαμβάνει όλα τα σχετικά αρχεία της διακλάδωσης πόρου που βρίσκονται σε αυτή τη διαδρομή καταχώρησης προέλευσης. Ο προσδιορισμός ενός ή περισσότερων μοτίβων συμπερίληψης σημαίνει ότι μόνο τα προσδιορισμένα τμήματα της διακλάδωσης προέλευσης θα συμπεριληφθούν. Κάθε διαδρομή που προσδιορίζεται πρέπει να είναι μια σχετική διαδρομή και θα ερμηνεύεται σε σχέση με την αντίστοιχη διαδρομή της καταχώρησης προέλευσης. Τα μοτίβα αρχείων χρησιμοποιούν διάκριση πεζών-κεφαλαίων. Ένα αρχείο που ταιριάζει με τα κριτήρια ενός ή περισσότερων μοτίβων συμπεριλαμβάνεται στην αντίστοιχη αφετηρία τμήματος πακέτου, εκτός κι αν εξαιρείται από ένα ή περισσότερα από τα μοτίβα εξαίρεσης της καταχώρησης αυτής.
Ανατρέξτε στην περιγραφή της μεθόδου
getExclusionPatterns
για αναλυτικές πληροφορίες σχετικά με τη σύνταξη και τη σημασιολογία των μοτίβων
διαδρομών. Η απουσία τυχόν μοτίβων εξαίρεσης είναι σημασιολογικά ισοδύναμη με το μοτίβο ρητής συμπερίληψης **
.
Το API isOnClasspath του έργου Java ελέγχει τόσο το μοτίβο συμπερίληψης όσο και το μοτίβο εξαίρεσης πριν προσδιορίσει αν ένας συγκεκριμένος πόρος βρίσκεται στη διαδρομή κλάσεων.
Παραδείγματα:
src/**
από μόνο του συμπεριλαμβάνει όλα τα αρχεία που περιέχονται σε έναν κεντρικό φάκελο με το όνομα src
.
src/**
και tests/**
συμπεριλαμβάνουν όλα τα αρχεία που περιέχονται στους κεντρικούς φακέλους src
και tests
.
src/**
μαζί με το μοτίβο εξαίρεσης src/**/Foo.java
συμπεριλαμβάνει όλα τα αρχεία που περιέχονται στον κεντρικό φάκελο src
εκτός από τα αρχεία με το όνομα Foo.java
.