IntelliJ IDEA z kompilatorem Eclipse ECJ
Spis treści
Jeżeli tworzymy programy napisane w Javie, to możemy je uruchamiać na różnych maszynach wirtualnych zgodnych ze specyfikacją, ale co ciekawe możemy także wykorzystywać różne kompilatory. Najpopularniejszy z nich to kompilator javac , który znajdziemy np. w OpenJDK, ale co ciekawe istnieje dla niego alternatywa rozwijana wraz ze środowiskiem Eclipse o nazwie Eclipse Compiler for Java , w skrócie ECJ.
Zalety ECJ
Kompilator ECJ jest domyślnie wykorzystywany w Eclipse IDE i ma jedną istotną zaletę w porównaniu do javac, która jest szczególnie wygodna dla osób, które dopiero rozpoczęły naukę. Potrafi on ignorować błędy i kontynuować kompilację pomimo ich występowania.
Początkowo może to brzmieć dziwnie, bo skoro w projekcie są błędy, to przecież zazwyczaj powinniśmy je wyeliminować, a nie ignorować. No i zazwyczaj tak jest, ale jeżeli dopiero się uczymy, to często eksperymentujemy. Zapisujemy kod na wiele różnych sposobów, tworzymy wiele klas, część z nich będzie się kompilowała, inna nie i w przypadku javac mamy do wyboru naprawiać wszystkie błędy na bieżąco, komentować wszystkie błędy, albo usuwać klasy, w których błędy występują. Wszystkie te trzy opcje mają swoje wady, bo czasami nie będziemy chcieli tracić czasu na to, żeby eliminować błędy, ale też nie chcemy usuwać plików źródłowych z błędami, bo może jeszcze do nich wrócimy w przyszłości.
W przypadku ECJ nie musimy się tym przejmować i jeżeli w jakimś pliku źródłowym występują błędy, ale nie mają one wpływu na działanie aktualnie uruchamianego programu, to błędy te mogą być zignorowane. Mówiąc prościej, jeżeli mamy klasy A i B, w klasie A występują błędy, ale my uruchamiamy program zapisany w klasie B, która w żaden sposób nie korzysta z klasy A, to program powinno się dać uruchomić.
Intellij i ECJ
IntelliJ IDEA, czyli najpopularniejsze środowisko programistyczne do Javy domyślnie wykorzystuje kompilator javac. Jeżeli w którymkolwiek pliku z kodem źródłowym w ramach projektu występują błędy kompilacji, to nie uda nam się uruchomić żadnego programu w tym projekcie, nawet jeżeli program taki w żaden sposób nie zależy od tego błędnego kodu.
Załóżmy, że uczymy się na temat zmiennych, więc eksperymentujemy z kodem w jednej klasie o nazwie Variables . Eksperymenty mają to do siebie, że nie zawsze kończą się sukcesem, więc w pliku występują jakieś błędy, ale chcąc kontynuować naukę o operatorach matematycznych, stworzyliśmy odrębną klasę MathOperators, w której zapisujemy różne działania, które chcemy przetestować.
Variables.java
class Variables {
public static void main(String[] args) {
int x = 5;
final String name = "Jan";
name = "Krzyszof" //błąd
System.out.println(name + x);
}
}
W klasie Variables jest błąd kompilacji - brakuje średnika i mamy próbę ponownego przypisania do zmiennej finalnej.
MathOperators.java
class MathOperators {
public static void main(String[] args) {
int a = 5;
a++;
a += 10;
System.out.println(a);
}
}
Klasa MathOperators nie posiada żadnych błędów i nie odwołuje się do klasy Variables. Pomimo tego, jeżeli spróbujemy ją uruchomić, to w IntelliJ IDEA się to nie uda, ponieważ javac po napotkaniu błędu przerwie kompilację, a wskutek tego IntelliJ nie będzie próbował nawet uruchomić programu.
Możemy to jednak zmienić poprzez ustawienie kompilatora Eclipse zamiast javac.
W tym celu przejdź do ustawień: IntelliJ IDEA > Settings na MacOS, albo File > Settings na Windows. Następnie w zakładce Preferences > Build, Execution, Deployment > Compiler > Java Compiler wybierz kompilator Eclipse, zamiast javac. Zaznacz też opcję Proceed on errors. To właśnie dzięki niej kompilacja projektu będzie kontynuowana nawet wtedy, gdy jedna z klas się nie skompiluje.
Zatwierdź zmiany i zamknij okno z ustawieniami.
Musimy jeszcze lekko zmienić konfigurację uruchomieniową projektu. Wybierz opcję Run > Edit Configurations, a następnie Modify Options > Add before launch task.
Wśród opcji, które się pojawią należy usunąć Build, a zamiast tego dodać Build, no error check.
Jeżeli spróbujesz teraz uruchomić projekt, to mamy dwie możliwości co do tego, co się wydarzy:
- Program uruchomi się poprawnie, pomimo błędów w drugiej klasie.
- Program się nie uruchomi ze względu na wersję kompilatora niezgodną z poziomem kompilacji ustawionym w projekcie.
Inna wersja ECJ
Druga sytuacja może wystąpić np. wtedy, gdy korzystamy z Mavena, albo Gradle i mamy poziom kompilacji ustawiony na wersję Javy nowszą niż wersja kompilatora Eclipse wbudowanego w IntelliJ:
Na szczęście i na to istnieje rozwiązanie. Możemy pobrać ze strony eclipse nowszą wersję kompilatora i podpiąć ją do IntelliJ samodzielnie. Przejdź do wyszukiwarki projektów na stronie eclipse i wyszukaj JDT, czyli Java Development Tools. Wejdź do wyszukanego projektu, a następnie to zakładki Downloads
Zobaczysz długą listę, możliwych do pobrania plików. Przejdź do najnowszej wydanej wersji, np.:
Teraz wyszukaj JDT Core Batch Compiler i pobierz kompilator w postaci pliku z rozszerzeniem .jar.
Ostatni krok to podpięcie kompilatora w ustawieniach IntelliJ. Ponownie przechodzimy do ustawień, czyli IntelliJ IDEA > Settings, albo File > Settings i w sekcji Build, Execution, Deployment > Compiler > Java Compiler wskazujemy ścieżkę do kompilatora, np.:
Zatwierdź zmiany i zamknij okno. Jeżeli jeszcze raz spróbujesz uruchomić program, to powinno się to udać, pomimo błędów w jednej z klas.
Niestety IntelliJ w momencie pisania tego artykułu posiada błąd, przez który nie można ustawić kompilatora Eclipse jako domyślnego dla wszystkich nowo tworzonych projektów, więc jeżeli zależy Ci na jego wykorzystaniu, to musisz te ustawienia zmieniać w każdym projekcie ręcznie.
Dyskusja i komentarze
Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.