Μεταγλώττιση κώδικα Java

Οι πρόσθετες λειτουργίες JDT συμπεριλαμβάνουν μια λειτουργία αυξητικής και μαζικής μεταγλώττισης Java για τη δόμηση αρχείων .class Java από τον πρωτογενή κώδικα. Δεν παρέχεται κάποιο άμεσο API από το μεταγλωττιστή. Είναι εγκατεστημένο ως εργαλείο δόμησης σε έργα Java. Η μεταγλώττιση ενεργοποιείται με τη χρήση των τυπικών μηχανισμών δόμησης πλατφόρμας.

Ο μηχανισμός δόμησης πλατφόρμας περιγράφεται αναλυτικά στην ενότητα Εργαλεία αυξητικής δόμησης έργου .

Μεταγλώττιση κώδικα

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

   IProject myProject;
   IProgressMonitor myProgressMonitor;
   myProject.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, myProgressMonitor);

Για την περίπτωση ενός έργου Java, το έργο αυτό καλεί το εργαλείο αυξητικής δόμησης Java (μαζί με κάθε άλλο εργαλείο αυξητικής δόμησης που έχει προστεθεί στην προδιαγραφή δόμησης του έργου). Τα αρχεία .class που δημιουργούνται εγγράφονται στον καθορισμένο φάκελο εξόδου. Στο φάκελο εξόδου αντιγράφονται επίσης και πρόσθετα αρχεία πόρων. 

Στην περίπτωση μαζικής δόμησης, όλα τα αρχεία .class του φακέλου εξόδου μπορούν να "διαγραφούν" ώστε να διασφαλιστεί ότι δεν θα υπάρχουν ανενεργά αρχεία. Η διαδικασία αυτή ελέγχεται με τη χρήση μιας επιλογής εργαλείου δόμησης πυρήνα JDT (CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER).  Ως προεπιλογή ορίζεται η εκκαθάριση των φακέλων εξόδου.  Αν δεν αλλάξει η επιλογή αυτή, πρέπει να διασφαλίσετε ότι τοποθετείτε όλα τα αρχεία .class, για τα οποία δεν έχετε αντίστοιχα αρχεία πρωτογενούς κώδικα, σε ένα ξεχωριστό φάκελο αρχείων κλάσεων στη διαδρομή κλάσεων και όχι στο φάκελο εξόδου.

Τα εργαλεία αυξητικής και μαζικής δόμησης μπορούν να ρυθμιστούν με άλλες επιλογές, οι οποίες ελέγχουν τους πόρους που αντιγράφονται στο φάκελο εξόδου.  Το παρακάτω παράδειγμα δείχνει τον τρόπο ορισμού ενός φίλτρου πόρων έτσι ώστε τα αρχεία που τελειώνουν σε ".ignore" και οι φάκελοι με το όνομα "META-INF" να μην αντιγράφονται στο φάκελο εξόδου:

      Hashtable options = JavaCore.getOptions();
   options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
   JavaCore.setOptions(options);

Τα ονόματα των αρχείων εξαιρούνται αν ικανοποιούν τα κριτήρια ενός από τα παρεχόμενα μοτίβα. Ολόκληροι φάκελοι εξαιρούνται αν το όνομά τους ταιριάζει με ένα από τα παρεχόμενα ονόματα φακέλων που τελειώνουν σε ένα διαχωριστικό διαδρομής.

Τα εργαλεία αυξητικής και μαζικής δόμησης μπορούν επίσης να ρυθμιστούν ώστε να δημιουργούν μόνο ένα μοναδικό σφάλμα όταν το αρχείο .classpath διαθέτει σφάλματα. Η επιλογή αυτή ορίζεται ως προεπιλογή και εξαλείφει τα πολυάριθμα σφάλματα.  Δείτε στην ενότητα Επιλογές εργαλείου δόμησης πυρήνα JDT μια πλήρη λίστα επιλογών που σχετίζονται με το εργαλείο δόμησης και τις προεπιλογές του.

Ο μεταγλωττιστής μπορεί επίσης να ρυθμιστεί με τη χρήση των επιλογών JavaCore.  Για παράδειγμα, μπορείτε να ορίσετε το επίπεδο σοβαρότητας που θα πρέπει να χρησιμοποιείται σε διάφορα είδη προβλημάτων τα οποία εμφανίζονται κατά τη διάρκεια της μεταγλώττισης.  Δείτε στην ενότητα Επιλογές μεταγλωττιστή πυρήνα JDT μια πλήρη λίστα των επιλογών που σχετίζονται με το μεταγλωττιστή και τις προεπιλογές τους.

Όταν ρυθμίζετε μέσω προγραμματισμού τις επιλογές για το εργαλείο δόμησης ή το μεταγλωττιστή, θα πρέπει να ορίσετε την εμβέλεια της επιλογής.  Για παράδειγμα, ένα φίλτρο πόρων μπορεί να προορίζεται μόνο για ένα συγκεκριμένο έργο:

   
   Hashtable options = myProject.getOptions(false);  // get only the options set up in this project
   options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
   myProject.setOptions(options);

Χρήση του μεταγλωττιστή παρτίδας αρχείων κώδικα

Εύρεση του μεταγλωττιστή παρτίδας αρχείων κώδικα

Η κλάση μεταγλωττιστή παρτίδας αρχείων κώδικα βρίσκεται στις εσωτερικές κλάσεις της πρόσθετης λειτουργίας JDT Core. Το όνομα της κλάσης είναι org.eclipse.jdt.internal.compiler.batch.Main. Η κλάση περιλαμβάνεται στο πακέτο plugins/org.eclipse.jdt.core_3.2.0.jar. Από την έκδοση 3.2, είναι επίσης διαθέσιμη ξεχωριστά για μεταφόρτωση. Το όνομα του αρχείου είναι ecj.jar. Ο αντίστοιχος πρωτογενής κώδικας είναι επίσης διαθέσιμος. Για να μεταφορτώσετε την κλάση και τον αντίστοιχο πρωτογενή κώδικα, μεταβείτε στη σελίδα μεταφορτώσεων και αναζητήστε την ενότητα για το μεταγλωττιστή παρτίδων JDT Core (JDT Core Batch Compiler). Αυτό το αρχείο jar περιλαμβάνει το μεταγλωττιστή παρτίδων και τον προσαρμογέα javac Ant.

Ως εκ τούτου, μπορεί να χρησιμοποιηθεί ως ανεξάρτητη εφαρμογή καθώς και σε διεργασίες δόμησης Ant εκτός του Eclipse.

Εκτέλεση του μεταγλωττιστή παρτίδας αρχείων κώδικα

Ποιες επιλογές είναι διαθέσιμες;

Οι προτεινόμενες επιλογές είναι αυτές με το πορτοκαλί φόντο.

Όνομα Χρήση
Επιλογές διαδρομής κλάσεων
-bootclasspath <dir 1>;<dir 2>;...;<dir P> Είναι η λίστα των καταλόγων ή των αρχείων jar που χρησιμοποιούνται για την εκκίνηση των αρχείων κλάσεων τα οποία χρησιμοποιεί ο μεταγλωττιστής. Ως προεπιλογή χρησιμοποιούνται οι βιβλιοθήκες του VM που εκτελείται. Οι καταχωρήσεις διαχωρίζονται από το διαχωριστικό διαδρομής πλατφόρμας.
Κάθε κατάλογος ή κανόνας μπορεί να καθορίσει κανόνες πρόσβασης για είδη μεταξύ '[' και ']'.
-cp
-classpath <dir 1>;<dir 2>;...;<dir P>
Είναι η λίστα των καταλόγων ή των αρχείων jar που χρησιμοποιούνται για τη μεταγλώττιση των αρχείων πρωτογενή κώδικα. Η προεπιλεγμένη τιμή είναι η τιμή της ιδιότητας "java.class.path". Οι καταχωρήσεις διαχωρίζονται από το διαχωριστικό διαδρομής πλατφόρμας.
Κάθε κατάλογος ή αρχείο μπορεί να καθορίσει κανόνες πρόσβασης για είδη μεταξύ '[' και ']' (π.χ. [-X] για απαγόρευση πρόσβασης στο είδος X, [~X] για μη συνιστώμενη πρόσβαση στο είδος X, [+p/X:-p/*] για απαγόρευση πρόσβασης σε όλα τα είδη του πακέτου p αλλά για πρόσβαση στο p/X).
-extdirs <dir 1>;<dir 2>;...;<dir P> Είναι η λίστα των καταλόγων που χρησιμοποιούνται για τον προσδιορισμό της θέσης των αρχείων επέκτασης zip/jar. Οι καταχωρήσεις διαχωρίζονται από το διαχωριστικό διαδρομής πλατφόρμας.
-endorseddirs <dir 1>;<dir 2>;...;<dir P> Είναι η λίστα των καταλόγων που χρησιμοποιούνται για τον προσδιορισμό της θέσης των εγκεκριμένων αρχείων zip/jar. Οι καταχωρήσεις διαχωρίζονται από το διαχωριστικό διαδρομής πλατφόρμας.
-sourcepath <dir 1>;<dir 2>;...;<dir P> Είναι η λίστα των καταλόγων που χρησιμοποιούνται για τον προσδιορισμό των αρχείων πρωτογενούς κώδικα. Οι καταχωρήσεις διαχωρίζονται από το διαχωριστικό διαδρομής πλατφόρμας.
Κάθε κατάλογος μπορεί να καθορίσει κανόνες πρόσβασης για είδη μεταξύ '[' και ']'.
-d <dir 1>|none Χρησιμοποιείται για τον προσδιορισμό του καταλόγου στον οποίο θα πρέπει να καταγραφούν τα αρχεία .class που δημιουργούνται. Αν παραλειφθεί, δεν δημιουργείται δομή καταλόγων πακέτου.
Αν δεν θέλετε να δημιουργήσετε αρχεία .class, χρησιμοποιήστε το -d none.
-encoding <όνομα κωδικοποίησης> Προσδιορίζει την προεπιλεγμένη μορφή κωδικοποίησης πρωτογενούς κώδικα. (Η προεπιλεγμένη κωδικοποίηση μπορεί επίσης να οριστεί σε επίπεδο αρχείου με την προσθήκη τους επιθήματος [<όνομα_κωδικοποίησης>] στο όνομα των φακέλων/αρχείων πρωτογενούς κώδικα. Για παράδειγμα, X.java[utf8].)
Επιλογές συμβατότητας
-target 1.1|1.2|1.3|1.4|1.5|5|5.0|1.6|6|6.0 Προσδιορίζει τη ρύθμιση του προορισμού του αρχείου .class. Οι πιθανές τιμές είναι:
  • 1.1 (κύρια εκδοχή: 45 δευτερεύουσα: 3)
  • 1.2 (κύρια εκδοχή: 46 δευτερεύουσα: 0)
  • 1.3 (κύρια εκδοχή: 47 δευτερεύουσα: 0)
  • 1.4 (κύρια εκδοχή: 48 δευτερεύουσα: 0)
  • 1.5, 5 ή 5.0 (κύρια εκδοχή: 49 δευτερεύουσα: 0)
  • 1.6, 6 ή 6.0 (κύρια εκδοχή: 50 δευτερεύουσα: 0)
Οι προεπιλογές είναι:
  • 1.1 σε κατάσταση λειτουργίας -1.3
  • 1.2 σε κατάσταση λειτουργίας -1.4
  • 1.5 σε κατάσταση λειτουργίας -1.5
  • 1.6 σε κατάσταση λειτουργίας -1.6
-1.3 Ορίζει το επίπεδο συμβατότητας 1.3. Αυτόματα -source 1.3 -target 1.1.
-1.4 Ορίζει το επίπεδο συμβατότητας 1.4 (προεπιλογή). Αυτόματα -source 1.3 -target 1.2.
-1.5 Ορίζει το επίπεδο συμβατότητας 1.5. Αυτόματα -source 1.5 -target 1.5.
-1.6 Ορίζει το επίπεδο συμβατότητας 1.6. Αυτόματα -source 1.6 -target 1.6.
-source 1.3|1.4|1.5|5|5.0|1.6|6|6.0 Χρησιμοποιείται για τον ορισμό του αναμενόμενου από το μεταγλωττιστή επιπέδου πρωτογενούς κώδικα.
Οι πιθανές τιμές είναι:
  • 1.3
  • 1.4
  • 1.5, 5 ή 5.0
  • 1.6, 6 ή 6.0
Οι προεπιλογές είναι:
  • 1.3 σε κατάσταση λειτουργίας -1.3
  • 1.3 σε κατάσταση λειτουργίας -1.4
  • 1.5 σε κατάσταση λειτουργίας -1.5
  • 1.6 σε κατάσταση λειτουργίας -1.6
Στο 1.4, το assert θεωρείται λέξη-κλειδί. Στο 1.5 και στο 1.6, το enum και το assert θεωρούνται λέξεις-κλειδιά.
Επιλογές προειδοποίησης
-warn:
allDeprecation
allJavadoc
assertIdentifier
boxing
charConcat
conditionAssign
constructorName
dep-ann
deprecation
discouraged
emptyBlock
enumSwitch
fallthrough
fieldHiding
finalBound
finally
forbidden
hiding
incomplete-switch
indirectStatic
intfAnnotation
intfNonInherited
javadoc
localHiding
maskedCatchBlocks
nls
noEffectAssign
null
over-ann
paramAssign
pkgDefaultMethod
raw
semicolon
serial
specialParamHiding
static-access
staticReceiver
suppress
synthetic-access
syntheticAccess
tasks(<task1>|...|<taskN>)
typeHiding
unchecked
unnecessaryElse
unqualified-field-access
unqualifiedField
unused
unusedArgument
unusedImport
unusedLabel
unusedLocal
unusedPrivate
unusedThrown
uselessTypeCheck
varargsCast
warningToken
Ορίζει το επίπεδο προειδοποίησης.
π.χ. -warn:unusedLocal,deprecation

Με κόκκινο χρώμα εμφανίζονται οι προεπιλεγμένες ρυθμίσεις.

    -warn:none                               απενεργοποίηση όλων των προειδοποιήσεων
    -warn:<warnings separated by ,>    ενεργοποίηση μόνο των αναφερόμενων προειδοποιήσεων
    -warn:+<warnings separated by ,>   ενεργοποίηση πρόσθετων προειδοποιήσεων
    -warn:-<warnings separated by ,>   απενεργοποίηση συγκεκριμένων προειδοποιήσεων
allDeprecation κατάργηση και εντός του καταργημένου κώδικα
allJavadoc μη έγκυρο ή ανύπαρκτο javadoc
assertIdentifier εμφάνιση του assert όπου χρησιμοποιείται ως ταυτότητα
boxing μετατροπή αυτόματων πλαισίων
charConcat όταν ένας πίνακας χαρακτήρων χρησιμοποιείται σε μια συνένωση σειρών χαρακτήρων χωρίς να μετατρέπεται ρητά σε σειρά χαρακτήρων
conditionAssign πιθανή τυχαία αντιστοίχιση λογικής τιμής
constructorName μέθοδος με όνομα λειτουργίας κατασκευής
dep-ann δεν υπάρχει σχόλιο @Deprecated
deprecation χρήση καταργημένου είδους ή μέλους εκτός του καταργημένου κώδικα
discouraged χρήση ειδών που ταιριάζουν με κανόνα μη συνιστώμενης πρόσβασης
emptyBlock μη τεκμηριωμένη κενή ενότητα
enumSwitch,
incomplete-switch
μη ολοκληρωμένη περίπτωση αλλαγής για απαρίθμηση
fallthrough πιθανή αποτυχία πρότασης case
fieldHiding το πεδίο αποκρύπτει μια άλλη μεταβλητή
finalBound πληκτρολόγηση παραμέτρου με τελικό όριο
finally η ενότητα finally δεν ολοκληρώνεται κανονικά
forbidden χρήση ειδών που ταιριάζουν με κανόνα απαγορευμένης πρόσβασης
hiding η μακροεντολή για τα fieldHiding, localHiding, typeHiding και maskedCatchBlock
indirectStatic έμμεση παραπομπή προς ένα στατικό μέλος
intfAnnotation είδος σχολίου που χρησιμοποιείται ως υπερ-διεπαφή
intfNonInherited μη μεταβιβασμένη συμβατότητα μεθόδων διεπαφής
javadoc μη έγκυρο javadoc
localHiding η τοπική μεταβλητή αποκρύπτει μια άλλη μεταβλητή
maskedCatchBlocks κρυφή ενότητα catch
nls λεκτικές σταθερές σειράς χαρακτήρων non-nls (λείπουν τα προσδιοριστικά //$NON-NLS-<n>)
noEffectAssign αντιστοίχιση χωρίς αποτέλεσμα
null ανύπαρκτος ή πλεονάζων έλεγχος null
over-ann δεν υπάρχει σχόλιο "@Override"
paramAssign αντιστοίχιση σε παράμετρο
pkgDefaultMethod προσπάθεια αντικατάστασης της προεπιλεγμένης μεθόδου για το πακέτο
raw χρήση αδιαμόρφωτου είδους (αντί παραμετροποιημένου είδους)
semicolon μη απαραίτητο ελληνικό ερωτηματικό ή κενή πρόταση
serial λείπει το serialVersionUID
specialParamHiding η λειτουργία κατασκευής ή η παράμετρος μεθόδου ορισμού αποκρύπτει ένα άλλο πεδίο
static-access η μακροεντολή για τα indirectStatic και staticReceiver
staticReceiver αν μια μη στατική λειτουργία λήψης χρησιμοποιείται για τη λήψη ενός στατικού πεδίου ή την κλήση μιας στατικής μεθόδου
suppress ενεργοποίηση @SuppressWarnings
syntheticAccess,
synthetic-access
για την πραγματοποίηση συνθετικής πρόσβασης για innerclass
tasks ενεργοποίηση υποστήριξης για προσδιοριστικά εργασιών στον πρωτογενή κώδικα
typeHiding παράμετρος είδους που αποκρύπτει ένα άλλο είδος
unchecked μη ελεγμένη λειτουργία γενικού είδους
unnecessaryElse μη απαραίτητη συνθήκη else
unqualified-field-access,
unqualifiedField
μη προσδιορισμένη παραπομπή προς το πεδίο
unused μακροεντολή για unusedArgument, unusedImport, unusedLabel, unusedLocal, unusedPrivate και unusedThrown
unusedArgument μη χρησιμοποιούμενο όρισμα μεθόδου
unusedImport παραπομπή σε μη χρησιμοποιούμενη εισαγωγή
unusedLabel μη χρησιμοποιούμενη ετικέτα
unusedLocal μη χρησιμοποιούμενη τοπική μεταβλητή
unusedPrivate μη χρησιμοποιούμενη δήλωση ιδιωτικού μέλους
unusedThrown μη χρησιμοποιούμενη δηλωθείσα εξαίρεση που προέκυψε
uselessTypeCheck μη απαραίτητη λειτουργία μετατροπής / instanceof
varargsCast το όρισμα varargs πρέπει να μετατραπεί ρητά
warningToken διακριτικό στοιχείο προειδοποίησης που δεν έχει αντιμετωπιστεί στο @SuppressWarnings

-nowarn Καμία προειδοποίηση (ισοδύναμη της -warn:none)
-deprecation Ισοδύναμη της -warn:deprecation.
Επιλογές εντοπισμού και διόρθωσης σφαλμάτων
-g[:none|:lines,vars,source] Ορισμός του επιπέδου γνωρισμάτων της λειτουργίας εντοπισμού και διόρθωσης σφαλμάτων
-g Όλες οι πληροφορίες εντοπισμού και διόρθωσης προβλημάτων (ισοδύναμη της -g:lines,vars,source)
-g:none Χωρίς πληροφορίες εντοπισμού και διόρθωσης προβλημάτων
-g:[lines,vars,source] Επιλεκτικές πληροφορίες εντοπισμού και διόρθωσης προβλημάτων
-preserveAllLocals Ρητή υποβολή αιτήματος προς το μεταγλωττιστή για τη διατήρηση όλων των τοπικών μεταβλητών (για λόγους εντοπισμού και διόρθωσης σφαλμάτων). Αν παραλειφθεί, ο μεταγλωττιστής θα αφαιρεί τις μη χρησιμοποιούμενες τοπικές μεταβλητές.
Επιλογές που παραβλέπονται (για συμβατότητα με επιλογές javac)
-J<option> επιλογή μεταβίβασης στο VM
-X<option> καθορισμός μη τυπικής επιλογής (Η επιλογή -Xemacs παραβλέπεται.)
-X εκτύπωση μη τυπικών επιλογών και έξοδος
-O βελτιστοποίηση για χρόνο εκτέλεσης
Ειδικές επιλογές
@<file> Ανάγνωση ορισμάτων γραμμής εντολών από αρχείο
-maxProblems <n> Μέγιστος αριθμός προβλημάτων ανά μονάδα μεταγλώττισης (από προεπιλογή 100)
-log <filename> Προσδιορισμός ενός αρχείου καταγραφής όπου καταγράφονται όλα τα δεδομένα εξόδου από το μεταγλωττιστή. Αυτή είναι ιδιαίτερα χρήσιμη όταν θέλετε να πραγματοποιήσετε εντοπισμό και διόρθωση σφαλμάτων στο μεταγλωττιστή παρτίδας αρχείων κώδικα ή να λάβετε ένα αρχείο το οποίο περιέχει όλα τα σφάλματα και τις προειδοποιήσεις από μια διεργασία δόμησης παρτίδας έργων. Αν η επέκταση είναι .xml, το αρχείο καταγραφής που θα δημιουργηθεί θα είναι ένα αρχείο xml.
-Xemacs Χρήση του στυλ emacs για την παρουσίαση των θέσεων των προειδοποιήσεων και των σφαλμάτων στην κονσόλα και στα κανονικά αρχεία καταγραφής (αρχεία μορφής κειμένου). Τα αρχεία καταγραφής XML δεν επηρεάζονται από αυτή την επιλογή. Όταν αυτή η επιλογή είναι ενεργοποιημένη, το μήνυμα:
2. ΠΡΟΕΙΔΟΠΟΙΗΣΗ σε /workspace/X.java
(στη γραμμή 8)...

θα εμφανίζεται ως εξής:
/workspace/X.java:8: warning: Η μέθοδος...
-proceedOnError Συνέχιση της μεταγλώττισης παρά τα σφάλματα. Θα γίνεται καταγραφή των αρχείων κλάσεων με προβληματικές μεθόδους ή είδη προβλημάτων. Συνιστάται μόνο για την περίπτωση που θέλετε να έχετε τη δυνατότητα εκτέλεσης της εφαρμογής σας ακόμη κι αν παραμένουν κάποια σφάλματα.
-verbose Εκτύπωση μονάδων μεταγλώττισης στις οποίες έχει πραγματοποιηθεί πρόσβαση/επεξεργασία, στην κονσόλα ή στο αρχείο καταγραφής, αν καθορίζεται.
-referenceInfo Υπολογισμός πληροφοριών παραπομπών. Χρησιμοποιείται μόνο αν υπάρχει σύνδεση με το εργαλείο δόμησης. Διαφορετικά, οι πληροφορίες παραπομπών είναι άχρηστες.
-progress Εμφάνιση προόδου (μόνο στην κατάσταση λειτουργίας -log)
-time Εμφάνιση πληροφοριών ταχύτητας
-noExit Δεν θα καλείται η μέθοδος System.exit(n) στο τέλος της μεταγλώττισης (n=0 αν δεν υπάρχει σφάλμα).
-repeat <n> Επανάληψη της διεργασίας μεταγλώττισης <n> φορές (για ανάλυση perf).
-inlineJSR Ένθεση κώδικα byte JSR (αυτόματα αν ο προορισμός >= 1.5)
-enableJavadoc λαμβάνονται υπόψη παραπομπές σε javadoc.
Βοηθητικές επιλογές
-? -? -help Εμφανίζει το μήνυμα βοήθειας.
-v -version Εμφάνιση του αριθμού δόμησης του μεταγλωττιστή. Πολύ χρήσιμη για την αναφορά ενός σφάλματος.
-showversion Εμφάνιση του αριθμού δόμησης του μεταγλωττιστή και συνέχεια. Πολύ χρήσιμη για την αναφορά ενός σφάλματος.

Παραδείγματα

d:\temp -classpath rt.jar -time -g -d d:/tmp Μεταγλωττίζει όλα τα αρχεία πρωτογενούς κώδικα του καταλόγου d:\temp και των υποφακέλων. Η διαδρομή κλάσεων είναι απλά rt.jar. Δημιουργεί όλα τα γνωρίσματα εντοπισμού και διόρθωσης σφαλμάτων και όλα τα αρχεία .class που προκύπτουν καταγράφονται στον κατάλογο d:\tmp. Η ταχύτητα του μεταγλωττιστή θα εμφανιστεί μόλις η διεργασία ομαδοποίησης σε παρτίδες ολοκληρωθεί.
d:\temp\Test.java -classpath d:\temp;rt.jar -g:none Μεταγλωττίζει μόνο το Test.java και τα εξαρτώμενα από αυτό αρχεία (αν υπάρχουν). Τα εξαρτώμενα αρχεία ανακτώνται από τον κατάλογο d:\temp. Η διαδρομή κλάσεων είναι ο κατάλογος d:\temp συνοδευόμενος από το rt.jar. Αυτό σημαίνει ότι όλες οι απαραίτητες κλάσεις αναζητούνται πρώτα στον κατάλογο d:\temp και μετά στο rt.jar. Δεν δημιουργεί γνωρίσματα εντοπισμού και διόρθωσης σφαλμάτων και όλα τα αρχεία .class που προκύπτουν καταγράφονται στον κατάλογο d:\tmp.

Χρήση του προσαρμογέα ant javac

Ο μεταγλωττιστής Eclipse μπορεί να χρησιμοποιηθεί σε ένα σενάριο Ant, με τη χρήση του προσαρμογέα javac. Προκειμένου να χρησιμοποιήσετε το μεταγλωττιστή Eclipse, χρειάζεται απλά να ορίσετε την ιδιότητα build.compiler στο σενάριό σας. Δείτε ένα μικρό παράδειγμα.
<?xml version="1.0" encoding="UTF-8"?>
<project name="compile" default="main" basedir="../.">

	<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>

	<property name="root" value="${basedir}/src"/>

	<property name="destdir" value="d:/temp/bin" />

	<target name="main">
		<javac srcdir="${root}" destdir="${destdir}" debug="on" nowarn="on" extdirs="d:/extdirs" source="1.4">
		    <classpath>
		      <pathelement location="${basedir}/../org.eclipse.jdt.core/bin"/>
		    </classpath>
		</javac>		
	</target>
</project>
Η σύνταξη που χρησιμοποιείται για την εργασία javac Ant δίνεται στην Τεκμηρίωση εργασιών Ant javac. Αυτός ο προσαρμογέας υποστηρίζει τις εκδοχές εργασιών Javac Ant από 1.4.1 έως 1.6.5.

Αν χρησιμοποιείτε μια εκδοχή νεότερη της 1.5.0, μπορείτε να χρησιμοποιήσετε το στοιχείο ένθετου ορίσματος μεταγλωττιστή για να προσδιορίσετε τις συγκεκριμένες επιλογές του μεταγλωττιστή.

...
<javac srcdir="${root}" destdir="${destdir}" debug="on" nowarn="on" extdirs="d:/extdirs" source="1.4">
    <classpath>
      <pathelement location="${basedir}/../org.eclipse.jdt.core/bin"/>
    </classpath>
    <compilerarg compiler="org.eclipse.jdt.core.JDTCompilerAdapter" line="-1.5 -warn:+boxing"/>
</javac>		
...

Για να μην λαμβάνετε σενάρια τα οποία εξαρτώνται από το μεταγλωττιστή, συνιστάται η χρήση του ορίσματος μεταγλωττιστή με τη ρύθμιση org.eclipse.jdt.core.JDTCompilerAdapter. Χωρίς τη ρύθμιση αυτή, το σενάριο θα μπορεί να χρησιμοποιηθεί μόνο με το μεταγλωττιστή Eclipse. Αν έχετε πραγματοποιήσει τη ρύθμιση, το ένθετο όρισμα μεταγλωττιστή θα παραβλέπεται, αν το όνομα είναι διαφορετικό από το όνομα του μεταγλωττιστή που προσδιορίζεται στην ιδιότητα build.compiler.

Καθορισμός προβλημάτων

Ο πυρήνας JDT ορίζει έναν εξειδικευμένο δείκτη (είδος δείκτη "org.eclipse.jdt.core.problem ") για τη δήλωση προβλημάτων μεταγλώττισης. Για να ανακαλύψετε μέσω προγραμματισμού τα προβλήματα που εντοπίζονται από το μεταγλωττιστή, θα πρέπει να χρησιμοποιήσετε το τυπικό πρωτόκολλο δεικτών πλατφόρμας. Ανατρέξτε στην ενότητα Δείκτες πόρων για μια επισκόπηση της χρήσης των δεικτών.

Το παρακάτω τμήμα κώδικα βρίσκει όλους τους δείκτες προβλημάτων Java σε μια μονάδα μεταγλώττισης.

   public IMarker[] findJavaProblemMarkers(ICompilationUnit cu) 
         throws CoreException {
      IResource javaSourceFile = cu.getUnderlyingResource();
      IMarker[] markers = 
         javaSourceFile.findMarkers(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER,
            true, IResource.DEPTH_INFINITE);
   }

Οι δείκτες προβλημάτων Java διατηρούνται από το εργαλείο δόμησης έργων Java και αφαιρούνται αυτόματα με την επίλυση των προβλημάτων και την αναμεταγλώττιση του πόρου Java.

Η τιμή της ταυτότητας του προβλήματος καθορίζεται με βάση μία από τις σταθερές που ορίζονται στη διεπαφή IProblem. Η ταυτότητα του προβλήματος είναι αξιόπιστη, αλλά το μήνυμα τροποποιείται τοπικά και επομένως μπορεί να αλλάξει ανάλογα με τις προεπιλεγμένες τοπικές ρυθμίσεις. Οι σταθερές που ορίζονται στη διεπαφή IProblem είναι περιγραφικές.

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

  ICompilationUnit unit = ..; // get some compilation unit
			
  // create requestor for accumulating discovered problems
  IProblemRequestor problemRequestor = new IProblemRequestor() {
    public void acceptProblem(IProblem problem) {
      System.out.println(problem.getID() + ": " + problem.getMessage());
    }
    public void beginReporting() {}
    public void endReporting() {}
    public boolean isActive() {	return true; } // will detect problems if active
  };
    
  // use working copy to hold source with error
  ICompilationUnit workingCopy = unit.getWorkingCopy(new WorkingCopyOwner() {}, problemRequestor, null);
  ((IOpenable)workingCopy).getBuffer().setContents("public class X extends Zork {}");

  // trigger reconciliation			
  workingCopy.reconcile(NO_AST, true, null, null);
Μπορείτε να προσθέσετε μια ενέργεια στα προβλήματα που αναφέρονται στη μέθοδο acceptProblem(IProblem). Στο παράδειγμα αυτό, το πρόβλημα που αναφέρεται είναι ότι το Zork δεν μπορεί να αναλυθεί ή δεν είναι έγκυρη υπερκλάση και η ταυτότητά του είναι IProblem.SuperclassNotFound.

Εξαίρεση προειδοποιήσεων με τη χρήση του SuppressWarnings

Το Java 5.0 παρέχει στο χρήστη την επιλογή να απενεργοποιήσει τις προειδοποιήσεις μεταγλώττισης που είναι σχετικές με ένα υποσύνολο μονάδας μεταγλώττισης χρησιμοποιώντας τη σημείωση java.lang.SuppressWarning.

	@SuppressWarning("unused") public void foo() {
		String s;
	}

Χωρίς τη σημείωση, ο μεταγλωττιστής θα εμφανίσει μήνυμα προειδοποίησης ότι η τοπική μεταβλητή s δεν χρησιμοποιείται. Αν υπάρχει η σημείωση, ο μεταγλωττιστής θα αγνοήσει "σιωπηρά" την προειδοποίηση αυτή τοπικά στη μέθοδο foo. Αυτό επιτρέπει τη διατήρηση των προειδοποιήσεων σε άλλες θέσεις τις ίδιας μονάδας μεταγλώττισης ή του ίδιου έργου.

Η λίστα των στοιχείων που μπορούν να χρησιμοποιηθούν μέσα σε μια σημείωση του SuppressWarning είναι τα εξής: