IntelliJ IDEA z kompilatorem Eclipse ECJ

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ć.

projekt intellijVariables.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.

intellij błąd kompilacjiMoż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.

ecj w intellij settings

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.

intellij run configuration modify options

Wśród opcji, które się pojawią należy usunąć Build, a zamiast tego dodać Build, no error check.

intellij build no error check

Jeżeli spróbujesz teraz uruchomić projekt, to mamy dwie możliwości co do tego, co się wydarzy:

  1. Program uruchomi się poprawnie, pomimo błędów w drugiej klasie.
  2. 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:

intellij IllegalArgumentException: source level should be in

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

jdt eclipse

Zobaczysz długą listę, możliwych do pobrania plików. Przejdź do najnowszej wydanej wersji, np.:

eclipse ostatni buildTeraz wyszukaj JDT Core Batch Compiler i pobierz kompilator w postaci pliku z rozszerzeniem .jar.

ecj download

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.:

ecj intellij pathZatwierdź 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.

intellij uruchomiony program

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.