PrzedsprzedażAkademia AI w testach i jakości oprogramowania: 1 350 zł zamiast 1 750 zł netto do 30 listopada

Startuje przedsprzedaż Akademii AI w testach i jakości oprogramowania: 5 tygodni z Tomaszem Stelmachem, start 11 stycznia 2027. Wyjątkowa cena 1 350 zł netto zamiast 1 750 zł tylko do 30 listopada.

zostało 34 dniZobaczcie program i zapiszcie się
IntelliJ IDEA pierwszy projekt: Maven, JDK 25 i JUnit
Czas czytania: 13 minut

IntelliJ IDEA pierwszy projekt to w praktyce pięć decyzji w kreatorze New Project: nazwa, język Java, system budowania, JDK i współrzędne Mavena. W tej lekcji założycie projekt Maven na JDK 25, poznacie strukturę katalogów, uruchomicie pierwszą klasę i pierwszy test JUnit, a na końcu dołożycie Selenium.

To trzecia lekcja kursu Javy dla testerów. Opis dotyczy IntelliJ IDEA 2026.2.3, aktualnej wersji z 16 września 2026 roku. Projekt z tej lekcji zbudowaliśmy lokalnie Mavenem 3.9.12 na JDK Temurin 25.0.2, z JUnit 6.1.3, a wszystkie wyniki i komunikaty błędów przepisaliśmy z konsoli. Jeśli nie macie jeszcze zainstalowanej Javy, zacznijcie od poprzedniej lekcji o instalacji środowiska.

Którą IntelliJ IDEA pobrać w 2026 roku?

Pobierzcie po prostu IntelliJ IDEA, bez szukania wersji Community. Według bloga JetBrains z lipca 2025 roku firma przeszła na jedną, wspólną dystrybucję: jest jeden instalator zamiast osobnych pobrań Community Edition i Ultimate. Bez subskrypcji IDE pozostaje w pełni funkcjonalne i darmowe, także w projektach komercyjnych, a funkcje Ultimate odblokowuje płatna subskrypcja. Zmiana weszła w wersji 2025.3 z grudnia 2025 roku. Według danych o wydaniach JetBrains ostatnia osobna wersja Community to właśnie 2025.3, a aktualne wydanie IntelliJ IDEA to 2026.2.3 z 16 września 2026.

Co Do wersji 2025.2 Od wersji 2025.3
Instalator dwa: Community i Ultimate jeden: IntelliJ IDEA
Bez subskrypcji Community, darmowa także komercyjnie darmowy zestaw funkcji, większy niż dawne Community
Z subskrypcją Ultimate jako osobny program funkcje Ultimate odblokowane w tym samym programie
Po wygaśnięciu subskrypcji do 2025.1 Ultimate przestawało działać, od 2025.2 przechodzi na darmowe funkcje IDE działa dalej z darmowym zestawem funkcji

Według tej samej dokumentacji JetBrains z 2026 roku IntelliJ IDEA działa na Windows 10 i 11, macOS 15 i 26 oraz na Linuxie, między innymi na Ubuntu 24.04 i 26.04 LTS.

Do tego kursu wystarczy darmowa część: edytor Javy, Maven, Gradle, JUnit, debugger i integracja z Git są w niej dostępne. Sprawdźcie jeszcze sprzęt, bo IDE do lekkich nie należy:

Wymagania IntelliJ IDEA według JetBrains

8 GB

RAM łącznie, z czego 3 GB wolne dla procesów IDE

4 rdzenie

procesor x86_64 albo arm64

10 GB

wolnego miejsca na dysku

1280 × 720

minimalna rozdzielczość ekranu

Źródło: JetBrains, IntelliJ IDEA Documentation, Install IntelliJ IDEA, System requirements, 2026.

IntelliJ IDEA pierwszy projekt krok po kroku

Uruchomcie IntelliJ IDEA. Na ekranie powitalnym kliknijcie New Project, a jeśli jakiś projekt jest już otwarty, wybierzcie z menu File | New | Project. Kreator wygląda tak samo na Windows, macOS i Linuxie. Oto jak przejść przez lekcję IntelliJ IDEA pierwszy projekt pole po polu:

  1. Na liście po lewej zostawcie Java.
  2. W polu Name wpiszcie pierwszy-projekt, w Location wybierzcie katalog na projekty kursu, na przykład ~/kurs-java.
  3. Opcję Create Git repository możecie zaznaczyć od razu. Plik .gitignore IDE i tak wygeneruje.
  4. W Build system wybierzcie Maven.
  5. Z listy JDK wybierzcie JDK 25 zainstalowane w poprzedniej lekcji. Jeśli go nie ma na liście, użyjcie Add JDK from Disk i wskażcie katalog z JAVA_HOME. Opcja Download JDK też działa, ale wtedy IDE ma inną Javę niż terminal.
  6. Zaznaczcie Add sample code, żeby dostać gotową klasę z metodą main.
  7. Rozwińcie Advanced Settings i wpiszcie GroupId pl.qualityisland (u Was odwrócona domena Waszej firmy) oraz ArtifactId pierwszy-projekt.
  8. Kliknijcie Create i poczekajcie, aż pasek postępu na dole okna zniknie. Maven pobiera wtedy pliki z internetu.

Pierwsze otwarcie projektu Maven bywa powolne i to normalne: IDE indeksuje JDK i ściąga zależności. Kawa zrobiona w tym czasie to nie lenistwo, tylko świadome zarządzanie zasobami. Kolejne otwarcia trwają już kilka sekund.

Maven, Gradle czy IntelliJ: który system budowania wybrać?

Najważniejsza decyzja w lekcji IntelliJ IDEA pierwszy projekt to system budowania. Kreator proponuje trzy systemy budowania. Wybór wpływa na to, gdzie zapiszecie zależności, takie jak JUnit czy Selenium, i jak uruchomicie testy poza IDE, na przykład na serwerze CI.

System Plik konfiguracji Kiedy wybrać Testy w terminalu
Maven pom.xml (XML) kurs, większość projektów testów w Javie, przykłady z dokumentacji Playwright for Java mvn test
Gradle build.gradle.kts albo build.gradle projekty, w których programiści już używają Gradle, na przykład aplikacje Android ./gradlew test
IntelliJ ustawienia w katalogu .idea jednorazowe próby kodu, bez zależności zewnętrznych tylko z poziomu IDE

W kursie używamy Mavena. Projekt testów, którego nie da się uruchomić jednym poleceniem w terminalu, nie zadziała też w pipeline CI, a tam testy automatyczne spędzają większość życia. Gradle jest równie dobry, ale jeśli zaczynacie, jeden format konfiguracji wystarczy.

Jak wygląda struktura katalogów projektu?

Maven narzuca stały układ katalogów. Według przewodnika Apache Maven o standardowym układzie katalogów kod aplikacji leży w src/main/java, a kod testów w src/test/java. Dzięki tej konwencji każdy, kto zna Mavena, od razu odnajdzie się w Waszym projekcie. Tak wygląda IntelliJ IDEA pierwszy projekt na dysku po utworzeniu i dodaniu testu:

pierwszy-projekt/
├── pom.xml
├── .idea/
├── src/
│   ├── main/
│   │   └── java/
│   │       └── pl/qualityisland/
│   │           └── Main.java
│   └── test/
│       └── java/
│           └── pl/qualityisland/
│               └── MainTest.java
└── target/
Katalog lub plik Co w nim jest Czy commitować do Git
pom.xml opis projektu: wersja Javy, zależności, wtyczki tak
src/main/java kod, który testujecie, albo kod pomocniczy, na przykład Page Object tak
src/test/java klasy testów; tylko tu widać zależności z zakresem test tak
src/test/resources dane testowe i pliki konfiguracji, tworzycie go, gdy będzie potrzebny tak
target/ skompilowane klasy i raporty testów, Maven tworzy go przy każdym buildzie nie
.idea/ ustawienia IDE dla tego projektu zwykle nie, poza wybranymi plikami

Katalogi pl/qualityisland to pakiet, czyli przestrzeń nazw klas. Każda klasa w tym katalogu zaczyna się od linii package pl.qualityisland;. IntelliJ oznacza src/main/java niebieską ikoną folderu źródeł, a src/test/java zieloną ikoną folderu testów. Plik .java poza tymi folderami nie zostanie skompilowany.

Co jest w pliku pom.xml?

Kreator tworzy minimalny pom.xml. Poniżej wersja, którą zbudowaliśmy na potrzeby lekcji: z wersją Javy ustawioną przez maven.compiler.release, zależnością JUnit 6.1.3 i wtyczką Surefire 3.6.0, która uruchamia testy. Według Maven Central z października 2026 roku to najnowsze stabilne wersje obu bibliotek.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>pl.qualityisland</groupId>
    <artifactId>pierwszy-projekt</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.release>25</maven.compiler.release>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>6.1.3</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.6.0</version>
            </plugin>
        </plugins>
    </build>
</project>

Trzy rzeczy warto zrozumieć od razu. Właściwość maven.compiler.release mówi kompilatorowi, dla której wersji Javy ma generować kod, więc musi być równa albo niższa od JDK, na którym budujecie. Zakres test przy JUnit oznacza, że biblioteka jest widoczna tylko w src/test/java. Po każdej zmianie w pom.xml kliknijcie ikonę Load Maven Changes, która pojawia się w prawym górnym rogu edytora, żeby IDE pobrało nowe zależności.

Jak uruchomić pierwszą klasę i pierwszy test?

Otwórzcie klasę Main. Zmieńcie jej treść na poniższą: metoda main wypisuje powitanie, a osobna metoda powitanie zwraca tekst, który za chwilę przetestujecie.

package pl.qualityisland;

public class Main {

    public static void main(String[] args) {
        System.out.println(powitanie("testerze"));
    }

    static String powitanie(String kto) {
        return "Witaj, " + kto + "! Projekt działa.";
    }
}

Kliknijcie zieloną strzałkę obok linii z main i wybierzcie Run ‘Main.main()’. IntelliJ skompiluje kod i otworzy okno Run z wynikiem:

Witaj, testerze! Projekt działa.

Process finished with exit code 0

Teraz pierwszy test. Kliknijcie prawym przyciskiem katalog src/test/java, wybierzcie New | Package, wpiszcie pl.qualityisland, a w nim utwórzcie klasę MainTest:

package pl.qualityisland;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.Test;

class MainTest {

    @Test
    void powitanieZawieraImie() {
        assertEquals("Witaj, Ania! Projekt działa.", Main.powitanie("Ania"));
    }
}

Zielona strzałka przy nazwie klasy uruchomi test w IDE. Ten sam test w terminalu, z katalogu projektu, uruchamia polecenie mvn test. Wynik z naszego przebiegu:

[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] BUILD SUCCESS

Zobaczcie też, jak wygląda porażka, bo to ją będziecie czytać najczęściej. Usunęliśmy z oczekiwanego tekstu wykrzyknik i uruchomiliśmy test jeszcze raz. Komunikat pokazuje obie wartości obok siebie, oczekiwaną i faktyczną, oraz numer linii w teście.

org.opentest4j.AssertionFailedError: expected: <Witaj, Ania Projekt działa.> but was: <Witaj, Ania! Projekt działa.>
[ERROR]   MainTest.powitanieZawieraImie:11 expected: <Witaj, Ania Projekt działa.> but was: <Witaj, Ania! Projekt działa.>

Jakie błędy pojawiają się przy pierwszym projekcie?

Trzy pierwsze odtworzyliśmy celowo na naszym projekcie, dwa ostatnie to komunikaty i ostrzeżenia samego IDE.

Komunikat Przyczyna Naprawa
Fatal error compiling: error: release version 25 not supported Maven działa na JDK 21, a pom.xml wymaga 25 ustawcie JAVA_HOME i JDK projektu na 25 albo obniżcie maven.compiler.release
package org.junit.jupiter.api does not exist import JUnit w klasie z src/main/java, a JUnit ma zakres test przenieście klasę testu do src/test/java
AssertionFailedError: expected: ... but was: ... test działa, tylko wynik różni się od oczekiwanego porównajcie obie wartości znak po znaku
Cannot resolve symbol przy imporcie dopisaliście zależność do pom.xml, ale IDE jej nie pobrało kliknijcie Load Maven Changes
żółty pasek o braku JDK projektu projekt nie ma przypisanego JDK File | Project Structure | Project, pole SDK, wybierzcie JDK 25

Pierwszy z tych błędów w całości, wywołany uruchomieniem mvn compile z JAVA_HOME ustawionym na Temurin 21:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile (default-compile) on project pierwszy-projekt: Fatal error compiling: error: release version 25 not supported -> [Help 1]

Wbrew pozorom

Drugi błąd z tabeli wygląda jak brak biblioteki, a biblioteka jest. JUnit leży w pom.xml, Maven go pobrał, test w src/test/java się kompiluje. Problemem jest tylko miejsce: zakres test sprawia, że kod z src/main/java w ogóle tej biblioteki nie widzi. To zamierzone, bo kod produkcyjny nie powinien zależeć od narzędzi testowych. Kiedy zobaczycie package ... does not exist przy bibliotece, którą na pewno dodaliście, najpierw sprawdźcie, w którym katalogu leży klasa.

Jak z tego projektu zrobić projekt testów automatycznych?

Dokładając jedną zależność. Selenium WebDriver w Javie to zwykła biblioteka z Maven Central, więc dopisujecie ją w sekcji dependencies obok JUnit i klikacie Load Maven Changes. Według Maven Central aktualna wersja to 4.51.0 z 9 października 2026 roku:

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.51.0</version>
    <scope>test</scope>
</dependency>

Pierwszy test przeglądarkowy mieści się w kilkunastu liniach. Według dokumentacji Selenium narzędzie Selenium Manager jest dołączone do każdego wydania i samo dobiera sterownik przeglądarki, więc nie pobieracie niczego ręcznie. Ten kod skompilowaliśmy poleceniem mvn test-compile na JDK 25:

package pl.qualityisland;

import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

class StronaGlownaTest {

    @Test
    void tytulStronyZawieraNazweFirmy() {
        WebDriver driver = new ChromeDriver(); // Selenium Manager sam dobierze sterownik
        try {
            driver.get("https://qualityisland.pl/");
            assertTrue(driver.getTitle().contains("Quality Island"));
        } finally {
            driver.quit();
        }
    }
}

To ten sam schemat co w MainTest: adnotacja @Test, akcja i asercja. Różni się tylko to, co testujecie. Struktura z tej lekcji, czyli Maven, katalogi main i test, JUnit i jedna zależność, to szkielet, na którym stoją także duże projekty automatyzacji. W Quality Island napisaliśmy już ponad 450 000 testów automatycznych i ten układ katalogów powtarza się w projektach każdej skali, od jednego testu po tysiące. Jeśli chcecie, żeby ktoś ułożył automatyzację w Waszym zespole od strony architektury i CI, zajrzyjcie do usługi automatyzacji testów. Jeśli wolicie nauczyć się tego sami, zacznijcie od szkolenia automatyzacja testów Selenium WebDriver albo automatyzacja testów z Playwright w Javie.

Skróty, które od razu przyspieszą Wam pracę w IntelliJ IDEA

Shift dwa razy

Search Everywhere: szukanie klas, plików, akcji i ustawień w jednym oknie

Alt+Enter

na Windows i Linuxie; podpowiedź naprawy przy podkreślonym kodzie, na przykład brakujący import

Ctrl+Spacja

uzupełnianie kodu, gdy podpowiedź nie pojawiła się sama

Alt+1

okno Project ze strukturą katalogów; na macOS Cmd+1

Ćwiczenie z rozwiązaniem

Zadanie: w projekcie pierwszy-projekt napiszcie klasę Walidator z metodą czyPoprawnyEmail(String). Adres jest poprawny, gdy ma znak @ nie na początku, a po nim kropkę, przed którą jest co najmniej jeden znak, i nie kończy się kropką. Napiszcie dwa testy: jeden dla poprawnego adresu, drugi dla pięciu niepoprawnych, w tym pustego tekstu i null. Uruchomcie wszystkie testy poleceniem mvn test.

Ćwiczenie zamyka lekcję IntelliJ IDEA pierwszy projekt: łączy klasę w src/main/java, test w src/test/java i uruchomienie w terminalu. Rozwiązanie. Klasa w src/main/java/pl/qualityisland:

package pl.qualityisland;

public class Walidator {

    static boolean czyPoprawnyEmail(String email) {
        if (email == null || email.isBlank()) {
            return false;
        }
        int malpa = email.indexOf('@');
        return malpa > 0 && email.indexOf('.', malpa) > malpa + 1 && !email.endsWith(".");
    }
}

Testy w src/test/java/pl/qualityisland:

package pl.qualityisland;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.Test;

class WalidatorTest {

    @Test
    void akceptujePoprawnyAdres() {
        assertTrue(Walidator.czyPoprawnyEmail("tester@qualityisland.pl"));
    }

    @Test
    void odrzucaAdresyBezMalpyIDomeny() {
        assertFalse(Walidator.czyPoprawnyEmail("tester.qualityisland.pl"));
        assertFalse(Walidator.czyPoprawnyEmail("tester@pl"));
        assertFalse(Walidator.czyPoprawnyEmail("tester@domena."));
        assertFalse(Walidator.czyPoprawnyEmail(""));
        assertFalse(Walidator.czyPoprawnyEmail(null));
    }
}
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.020 s -- in pl.qualityisland.WalidatorTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 s -- in pl.qualityisland.MainTest
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
[INFO] BUILD SUCCESS

Zauważcie, że warunek email == null stoi na początku. Gdyby był na końcu, wywołanie email.isBlank() na null rzuciłoby wyjątek, zanim test zdążyłby cokolwiek sprawdzić. Dlaczego kolejność ma znaczenie, wyjaśnia lekcja o operatorach logicznych i krótkim spięciu. Tego walidatora nie używajcie w produkcji: to ćwiczenie z testów, a nie pełna zgodność ze specyfikacją adresów e-mail. Dopiszcie do niego własne przypadki brzegowe, na przykład dwie małpy albo spację w środku, i sprawdźcie, które przechodzą. To najlepszy możliwy odruch testera. W Quality Island przeszkoliliśmy już ponad 2 500 specjalistów i właśnie ten odruch, szukanie przypadku, którego autor kodu nie przewidział, odróżnia testera od osoby, która tylko uruchamia testy.

Poprzednia lekcja2. Instalacja środowiska JavaSpis kursuWszystkie lekcje kursu JavyNastępna lekcja4. Java: pierwszy program

Jeśli chcecie zobaczyć, jak takie projekty wyglądają w dużych zespołach, ludzie, którzy je budują, występują co roku na Testing Ground Conference, konferencji o jakości oprogramowania, którą organizuje Quality Island.

Co zabrać z tego artykułu

01IntelliJ IDEA pierwszy projekt zaczyna się od pobrania jednej dystrybucji: od wersji 2025.3 jest jedna IntelliJ IDEA; darmowa część wystarcza do kursu i działa także w projektach komercyjnych.

02W kreatorze wybierzcie Maven i to samo JDK 25, które ustawiliście w JAVA_HOME.

03Kod w src/main/java, testy w src/test/java; target/ nie trafia do Git.

04maven.compiler.release nie może być wyższe niż JDK, na którym budujecie.

05Selenium dodajecie jak każdą zależność: wpis w pom.xml i Load Maven Changes.

Źródło: JetBrains, Apache Maven, Maven Central i Selenium, stan na 10.10.2026; projekt zbudowany na Temurin 25.0.2 z Maven 3.9.12.

Na szkoleniu Java dla testerów zakładacie projekt, piszecie klasy i testy JUnit z trenerem, a każdy błąd z tej lekcji rozbieracie na żywo, na własnym komputerze.

Zobacz szkolenie z Javy


Powiązane na blogu Quality Island

Pełna lista źródeł

Co o tym sądzisz?

Dodaj komentarz

Bądź na bieżąco
Strefa QA, portal z eksperckimi artykułami o jakości oprogramowania
Bądź na bieżąco
Cyberbezpieczeństwo KSC i NIS2 online: pakiet dla organizacji do 250 osób

9 900,00 zł

Cyberbezpieczeństwo KSC i NIS2 online: pakiet dla organizacji do 50 osób

4 900,00 zł

Cyberbezpieczeństwo KSC i NIS2 online: ścieżka dla zespołów IT

390,00 zł

Popularne artykuły
Język Gherkin: co to jest i jak go używać w testowaniu oprogramowania
Smoke test: co to jest, kiedy go uruchamiać i czym różni się od sanity testu
Jak zostać testerem oprogramowania: ścieżka krok po kroku bez dyplomu informatyka
Najnowsze artykuły
Wdrożenie AI w zespole QA: plan 90 dni, koszt pilotażu i karta mierników
NIS2 a dostawcy oprogramowania: jakich testów zażąda od Was klient objęty KSC
Testowanie migracji danych i systemów: co sprawdzić, zanim przełączycie produkcję
Popularne kategorie

Grupa marek jakości oprogramowania

Jakość oprogramowania w Polsce ma swój adres

Quality Island