PRA01.rst

Pracownia Programowania

Środowisko Pracy

Uwaga! cały kod do Zadania 7 włącznie znajduje się na gałęzi IntroductionClassesStart w repozytorium https://github.com/WitMar/PRA2018-2019 . Kod końcowy w gałęzi IntroductionClassesEnd.

Edytor

W środowisku Java polecany edytor to IntelliJ IDEA dostępny w darmowej wersji Community tutaj:

GIT

GIT to system kontroli wersji oprogramowania.

Git posiada trzy stany, w których mogą znajdować się pliki: zatwierdzony, zmodyfikowany i śledzony. Zatwierdzony oznacza, że dane zostały bezpiecznie zachowane w Twojej lokalnej bazie danych. Zmodyfikowany oznacza, że plik został zmieniony, ale zmiany nie zostały wprowadzone do bazy danych. Śledzony - oznacza, że zmodyfikowany plik został przeznaczony do zatwierdzenia w bieżącej postaci w następnej operacji commit.

Podstawowy sposób pracy z Git wygląda mniej więcej tak:

* Dokonujesz modyfikacji plików w katalogu roboczym.

* Oznaczasz zmodyfikowane pliki jako śledzone, dodając ich bieżący stan (migawkę) do przechowalni.

* Dokonujesz zatwierdzenia (commit), podczas którego zawartość plików z przechowalni zapisywana jest jako migawka projektu w katalogu Git.

GIT FLOW:

a10

Zadanie 1

Załóż konto na GitHub

Otwórz repozytorium

Wybierz Fork by ściągnąć repozytorium na własne konto.

Intellij

Otwórz Idea intellij na komputerze.

W przypadku, gdy uruchamiasz edytor poraz pierwszy zobaczysz wyskakujące okno i wybierz z niego Project from version control, w przypadku, gdy nie jest to Twoje pierwsze uruchomienie wejdź na File-> New -> Project From Version Control -> Git.

Skopiuj w pokazującym się nowym oknie adres dostępny po wybraniu na stronie GitHub opcji CloneOrDownload (uwaga wybierz adres z opcja HTTPS, adres w opcji SSH nie zadziała!!).

1

Wybierz w prawym dolnym rogu aplikacji nazwę brancha i przenieś się na branch IntroductionClassesStart.

a2

Powinieneś uzyskać następujący efekt - z dokładnością do nazwy klasy. Uwaga jeśli kod nie jest pokolorowany tak jak oczekujesz znaczy to, że środowisko nie znalazło automatycznie twojego pliku Mavena:

Wybierz ikonkę lupki i wpisz maven, wybierz opcję Add Maven Project.

aMV

Następnie znajdź katalog do którego ściągnąłeś kod i wybierz plik pom.xml. Powinieneś otrzymać poniższy wynik (spójrz na ikonki przy plikach!):

a33

Jeżeli nadal kod nie jest dobrze pokolorowany wejdź w opcje File -> Project Structure, ustaw wersje Javy na 8 w zakładce Project oraz składni w zakładce Module też na java 8.

a3

Sprawdź wersje kompilatora używanego przez IDE File -> settings -> compiler, też wybierz wersję Java 8.

a113

MAVEN

System budowania aplikacji, który pomaga nam zautomatyzować proces kompilacji i generowania jar-ów, war-ów itp. Narzuca on też specyficzną strukturę projektu.

* pom.xml – główny plik konfiguracji Maven

* /src/main – katalog, gdzie znajdziemy pliki naszego programu, są tam dwa podkatalogi: java – tutaj trafiają wszystkie klasy (cały kod naszego modułu)

* resources – tutaj będą wszystkie pliki, które nie są kodem, np. grafiki, pliki XML, konfiguracje w przypadku projektów webowych będziemy mieli także katalog webapp, który jest używany do umieszczania wszystkich treści webowych

* /src/test - ma podobną strukturę jak katalog main z tą różnicą, że jest on wykorzystywany tylko w trakcie automatycznych testów

* /target – tutaj trafia skompilowany projekt (czyli np. w postaci wykonywalnego pliku JAR lub aplikacji webowej WAR)

W prawym górnym rogu znajdziemy zakładkę "Maven". Jeżeli nie masz takiej zakładki włączysz ją poprzez wybranie View -> Tool Windows -> Maven Projects.

Po rozwinięciu powinniśmy widzieć listę instrukcji (jeżeli nie wybieramy odśwież - dwie zielone strzałki, jak nie pomoże klikamy plusik i wskazujemy na plik pom.xml w naszym projekcie i ok).

a22

Zadanie 2

Wykonaj w zakładce Mavena Clean + Install, powinieneś otrzymać komunikat BUILD SUCCESS

Po tym etapie plik Main.java powinien mieć obok nazwy klasy zielone kółeczko z "c" w środku, jeżeli tak nie jest najlepiej powtórz wszystkie operacje od początku.

Więcej o Mavenie można znaleźć np tutaj:

Zadanie 3

Spróbuj uruchomić klasę Main.java (pracy klik myszki i wybór opcji Run). Wykonaj to samo na pliku z rozszerzeniem .jar z katalogu o nazwie target. Zobacz jaki będzie efekt.

Pełen opis MAVENA:

Tworzenie plików wykonywalnych różnego typu

Logger

Bardzo ważnym i pomocnym elementem projektu informatycznego jest logowanie komunikatów / błędów. Szczególnie użyteczne są możliwości dzielenia logów na poziomy, zapisywanie automatyczne do pliku, a także możliwość analizy aplikacji wielowątkowych. Przykładem biblioteki do logowania jest log4j.

Aby używać w naszym projekcie biblioteki log4j dodajmy do naszego projektu (do pliku mavena pom.xml) zależność do biblioteki logowania log4j wklejając tam:

<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

W ogólności jeżeli chcemy dodać bibliotekę log4j do projektu, aby znaleźć odpowiedni wpis wystarczy w google wpisać maven log4j. Pierwszy link powinien zaprowadzić nas na stronę:

Po wyborze wersji zobaczymy wpis:

Uwaga! Za pierwszym razem dodaliśmy tag dependencies w przyszłości będziemy tylko wklejać odpowiednie dependencje pomiędzy ten tag.

Odśwież zakładkę Mavena powieneś widzieć na niej nową kategorię o nazwie Dependencies a w niej jeden wpis na temat log4j.

Teraz dodamy do klasy Main.java wywołanie loggera. Dodaj do klasy zmienną globalną:

Logger log = Logger.getLogger("name");

Uwaga! Dodając nowy obiekt zwróć uwagę, że korzystać z biblioteki log4j, gdyż w Javie jest wiele bibliotek o nazwie Logger, i wykorzystanie innej nie zadziała tak jak chcemy. Innymi słowy spójrz czy w powstałym imporcie w nazwie klasy jest log4j.

Dodaj w metodzie main() wywołanie:

log.info("message");

Zadanie 4

Uruchom klasę Main.java zobacz czy widzisz wiadomość "message".

Log4j

Powód dla którego nie widzisz wiadomości jest to, że nie zdefiniowaliśmy ustawień loggera, w związku z czym informacje na nim zapisywane nie są nigdzie przekazywane.

Aby stworzyć pliku ustawień musimy utworzyć w katalogu Resources plik o nazwie log4j.properties;

Wklej do pliku następujące ustawienia:

# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Ustawienia mówią o tym by wszystkie logi o statusie ponad DEBUG były wypisywane na ekran i zapisywane w pliku log.log.

Więcej informacji o log4j można doczytać tutaj:

Zadanie 5

Uruchom klasę Main.java, powinieneś zobaczyć na ekranie komunikat "message". W katalogu projektu powinnien też zostać stworzony plik o nazwie log.log.

JAR

JAR jest skompilowanym uruchamialnym plikiem javy. Możesz go uruchomić z IDE lub z konsoli wpisując komendę java -jar filename.

Żeby JAR się uruchomił musi mieć zdefiniowaną ścieżkę do klasy uruchomieniowej (tzw. manifest).

Dodaj do pliku pom.xml (Mavena) następujący kod:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <finalName>${project.artifactId}-${project.version}</finalName>
                        <attach>false</attach>
                        <appendAssemblyId>false</appendAssemblyId>
                        <archive>
                            <manifest>
                                <mainClass>
                                    example.HelloWorld
                                </mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Main class jest ścieżką do uruchamianej klasy.

Task 6

Zkompiluj projekt używając Clean + Install w Maven i uruchom plik .jar z katalogu target, powinien zadziałać.

Commit

Zadanie 7

Zakommituj swój kod do repozytorium pod nowy branch o nazwie IntroductionClassesWithLogger.

Commit w IntelliJ

Ctrl + k służy do commitowania kodu lokalnie do repozytorium

Ctrl + Shift + k służy do commitowania kodu do zewnętrznego repozytorium, aby wybrać nową nazwę brancha kliknij na nazwę brancha w okienku komitowania.

Ctrl + t służy do odświeżania projektu - ściągania zmian z serwera

Inne:

By rozwiązać konflikty należy zmergować się z kodem do którego commitujemy i rozwiązać konflikty w nowo otwartym oknie.

Aby ściągnąć kod danego commita do siebie bez merga możemy wykonać operację Cherry Pick

Finalny kod

W przypadku problemów (zgubiłeś się lub byłeś nieobecny) finalny kod powstały na zajęciach możesz znaleźć na gałęzi IntroductionClassesEnd.