Wo legt IntelliJ .class-Dateien ab, wenn es während der Eingabe kompiliert wird?
-
21-12-2019 - |
Frage
Kompiliert IntelliJ ständig, da es mir mit roten, schnörkeligen Linien anzeigt, wenn ein Fehler vorliegt?(zusätzlich zu den Autovervollständigungsfunktionen) Oder führt es eine Art Pseudokompilierung durch?
Wenn es eine legitime Kompilierung durchführt, wo werden diese kompilierten Klassen abgelegt?Ich möchte mein JRebel auf dieses Verzeichnis verweisen, anstatt auf die einzelnen Modulzielordner.
Lösung
Meo hat Recht. Nach dem, was ich bei der Entwicklung von Plugins für benutzerdefinierte Sprachen gelernt habe, kompiliert IntelliJ nichts, bis Sie Ihr Projekt explizit erstellen.Während Sie tippen, erkennt der Lexer/Parser ungültige Token oder Codekonstrukte.In der Zwischenzeit wird ein Index aller Klassen und Methoden in Ihrem Projekt und ihrer Abhängigkeiten sowie deren Signatur usw. verwaltet.
Nachdem Sie mit der Eingabe aufgehört haben, sehen Sie oben im rechten Randbereich ein kleines farbiges Auge.Es zeigt an, dass die IDE „Annotatoren“ und „Codeinspektionen“ ausführt.Sie können anhand des aktuellen Index und des aktuellen Status Ihrer Datei (Importe, Deklarationen usw.) feststellen, ob Klassen, Methoden und Variablen gültig sind oder nicht.Das Gleiche gilt für nicht verwendete Variablen, ungültige Parameter in Methodenaufrufen usw.
Vorteile:
- Annotatoren arbeiten direkt an einem sogenannten PSI-Baum, bei dem es sich im Grunde um einen erweiterten AST handelt, der Ihre aktuelle Datei darstellt
- Es ist möglicherweise schneller als das Kompilieren jedes Mal (es verwendet einen Index und muss nicht jede abhängige Klasse neu kompilieren).
- Annotatoren können Dinge erkennen
javac
egal sind, wie z. B. potenzielle Fehler (z. B.verwenden=
anstatt==
in einemwhile
Zustand)
Nachteile:
- Das ist eine Menge Arbeit, im Grunde müssen sie die Logik neu schreiben, um jeden Fehler zu finden
javac
produzieren kann (weshalb Sie auf ihrem Bugtracker viele Probleme mit der Bezeichnung „Guter Code ist rot„ oder „schlechter Code ist grün“, was bedeutet, dass es einen Unterschied zwischen dem, was sie erkennen, und dem, was der Compiler ausgeben würde, gibt)
TL;DR:es produziert keine .class
Bis Sie Ihr Projekt fertigstellen, wird alles „von Hand“ gemacht.
Andere Tipps
Für jedes Modul kann der Compiler-Ausgaberad in -Moduleinstellungen in paths gefunden werden. Jreebel-Plugin generiert REBEL.XML automatisch und leitet den Verzeichnispfad von -Moduleinstellungen ab, sodass Sie nicht manuell auf die Standorte hinweisen müssen - generieren Sie einfach Rebel.xml mit dem IDE-Plugin: Klicken Sie mit der rechten Maustaste auf Modul inDie Projektansicht -> Jrebel -> REBEL.XML generieren
intellij versteht den Code, es muss den Code nicht kompilieren, um zu wissen, was falsch ist.
Ich habe meine .klasse-Dateien gefunden, indem ich aus dem Heimverzeichnis des Projekts aus den Aus- / Produktions- / Hauptordnern gehe.