5 Užitečných Java knihoven, které bys měl znát

Dnešní moderní programovací jazyky vývojářům poskytují už od základu mnoho užitečných funkcí. Dávno jsou pryč časy, kdy i jednoduché operace si zkušený programátor musel psát sám...

5 Užitečných Java knihoven, které bys měl znát

(doporučuji pro tento článek alespoň základní znalosti Javy a angličtiny)

Dnešní moderní programovací jazyky vývojářům poskytují už od základu mnoho užitečných funkcí. Dávno jsou pryč časy, kdy i jednoduché operace si zkušený programátor musel psát sám. Jenže i přes to, že programovací jazyky jako je Java vám dokáží pomocí svých integrovaných funkcí usnadnit čas i v řádech hodin, né vždy narazíte přesně na to, co potřebujete. Pokud se jedná o maličkost, není těžké si vytvořit vlastní funkci. Ale co když potřebujeme například parsovat JSON! Takové funkce často bývají velmi náročné na naprogramování, zaberou dost času, a pokud je implementuje né příliš zkušený programátor, může udělat i chybu.

Je tu ale i alternativní možnost: Knihovny!

Co to ty knihovny vlastně jsou?

Někoho už dříve napadlo, proč vytvářet pořád dokola jednu a tu samou věc v každém programu, když se může vytvořit jednou, a pouze do našeho programu přibalit? A tak nějak (pravděpodobně? :D) vznikly knihovny. Ve zkratce se jedná o již hotové části kódu, které můžeme použít v našem kódu. Tím minimalizujeme problém s pravidlem DRY (Dont Repeat Yourself), kdy bychom stejný kód do každého programu museli dávat sami znovu, znovu a znovu. Často programátoři vytváří společné knihovny. Jsou to knihovny, ke kterým má přístup mnoho lidí, často jsou veřejné a open-source. Jsou to knihovny, na které se v tomto příspěvku podíváme.

Jak můžeme knihovny používat?

Dobře, vytvořili jsme nějakou knihovnu. Ale, jak jí teď dopravit do našeho programu? Mohli bychom si ho sice stáhnout a celý vložit do našeho kódu, jenže, co když vyjde aktualizace? Nebo ještě hůře, ta knihovna používá další knihovny? Dokážete si představit, že by to nebylo zrovna ideální. Proto vznikly takzvané dependency managery. Různé programovací jazyky mají různé dependency managery. U Javascriptu se jedná například o NPM (Node Package Manager), u Javy máme na výběr mezi Mavenem (jednoduchý, definován v pom.xml souboru) a Gradlem (programovatelný, definován v build.gradle, kompatibilní s maven dependencies). Takové dependency managery používají speciální repozitáře. Jedná se o místa, na které se všechny naše knihovny nahrávají, a jsou dostupné dalším vývojářum. Mezi největší pro Javu patří například Maven Central, na kterém najdete skoro vše. Repozitář si může vytvořit i samotný člověk pro své účely.

V dnešním článku se nebudeme věnovat tomu, jak si knihovny přibalit, to by bylo na další dlouhé téma. Zde se hlavně dozvíme o několika užitečných knihovnách, které dokáží najít uplatnění v každém projektu.


1) Guava

logo knihovny Guava
Guava is a set of core Java libraries from Google that includes new collection types (such as multimap and multiset), immutable collections, a graph library, and utilities for concurrency, I/O, hashing, caching, primitives, strings, and more! It is widely used on most Java projects within Google, and widely used by many other companies as well.

Guava je velmi obsáhlá knihovna, obsahující mnoho užitečných funkcí. Jejím hlavním autorem je samotný Google, na jehož GitHub repozitáři se celá knihovna nachází. Guava obsahujé téměř vše, na co si vzpomenete. Nejedná se tedy o knihovnu se zaměřením, ale o obecnou knihovnu. Taková knihovna vám tedy nedokáže například parsovat JSON soubory, ale usnadní vám spousty jiných, obecných věcí. Od grafů, přes matematiku až po velmi užitečnou cache.

Cache<String, String> cache = CacheBuilder.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES);
jednoduchý způsob, jak vytvořit cache, která má timeout 5 minut po přístupu ke klíči

Tato knihovna ani není příliš náročná na pochopení. Na internetu se dá najít mnoho tutoriálu, a navíc i oficiální dokumentace je přívětivá pro začátečníky. Kód této knihovny je aktivně vyvíjen, je k němu dodávána podpora v issues na GitHubu.

Pokud tedy hledáte základní knihovnu, doporučuji se podívat na GitHub Guavy, kde najdete podrobnější popis.

2) Gson

logo knihovny GSON
Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Gson can work with arbitrary Java objects including pre-existing objects that you do not have source-code of.

U knihoven od Google ještě chvíli zůstaneme. Několikrát jsem v tomto příspěvku zmínil JSON (JavaScript Object Notation). Jedná se o člověkem čitelný formát pro ukládání objektů do souboru. Je to jeden z nejpoužívanějších formátu pro ukládání a přenášení dat mezi programovacími jazyky.

V Javě existuje několik knihoven pro jeho parsování, mezi které patří například Jackson, ale i zmíněný Gson. Proč jsem tedy zvolil Gson?

Z mých zkušeností se jedná o jednodušší volbu pro serializaci a deserializaci mezi Java objekty a JSONem. Na začátek vám stačí dokonce jen několik řádků!

String json = "{\"name\":\"Jan\", \"surname\": \"Novak\"}";
Gson gson = new Gson();
User user = gson.fromJson(json, User.class);
převod z JSONu na objekt
User user = new User("Jan", "Novak");
Gson gson = new Gson();
String json = gson.toJson(user);
převod z objektu na JSON

Práce s touto knihovnou zvládne tedy i naprosty začátečník. Knihovna obsahuje i další užitečné funkce, které se řadí už mezi pokročilejší, ale často si člověk vystačí s tímto základem.

3) Log4J

logo knihovny Log4J

Nebojte se, zde nepůjde o žádný hackerský útok. Mnoho lidí si knihovnu Log4J aktuálně spojuje s jednou, z největších bezpečnostních děr v historii celého internetu. Chyba už je ale opravena, a proto vám mohu tuto knihovnu bezpečně doporučit.

Když vytváříte aplikaci, někdy potřebujete výstup formátovat, případně zaznamenávat do souboru či jiných míst. Log4J vám toto vše poskytne. Jedná se o jednoduchou knihovnu pro logování v Java aplikacích. Stačí pouze definovat konfigurační soubor log4j2.xml (přibalený s programem, obsahuje nastavení logování) a můžeme začít logovat. Samotná knihovna dokáže pracovat ze základu s několika úrovněmi logování, například ERROR, INFO, DEBUG a další.

Jelikož se jedná již o něčo pokročilejší knihovnu, doporučuji spíše využít google či jejich oficiální wiki, jelikož vysvětlování všech možností by zabralo dalších několik článků.

4) OkHttpClient

logo knihovny OkHttpClient

Někdy programátor potřebuje ve svém programu volat nějakou webovou API, stahovat obsah stránek nebo se připojit na nějaký WebSocketový server. Můžeme buď využít nativní http client, integrovaný přímo v Javě.

Můžeme ale použít i pokročilou knihovnu OkHttpClient. Díky ní můžete volat webové stránky s kódem krátkým jen pár řádků. Knihovna obsahuje ale i mnoho vychytávek, mezi které patří asynchronní volání, nativní kód v Kotlinu a již zmíněné WebSockety.

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("http://speedy11.cz/some-random-api/")
  .build();
Call call = client.newCall(request);
Response response = call.execute();
System.out.println(response.body().string());
jednoduché vypsání obsahu API

OkHttpClient tedy zvládne používat úplně každý.

5) Project Lombok

logo knihovny Project Lombok

Čím více váš kód roste, tím více se začnete opakovat. Co například takové gettery a settery u objektů? Konstruktory? Utility classes? Někomu to pravděpodobně už přišlo natolik otravné, až vznikl Project Lombok!

Jedná se zároveň o knihovnu i anotační procesor (zpracovává anotace při kompilaci). Můžeme tedy velké množství kódu nahradit jednoduchou anotací!

public class User {
	
    private String name;
    private String surname;
    private int age;
    
    public User(String name, String surname, int age) {
    	this.name = name;
        this.surname = surname;
        this.age = age;
    }
    
    public String getName() {
    	return name;
    }
    
    public void setName(String name) {
    	this.name = name;
    }
    
    public String getSurname() {
    	return surname;
    }
    
    public void setSurname(String surname) {
    	this.surname = surname;
    }
    
    public int getAge() {
    	return age;
    }
    
    public void setAge(int age) {
    	this.age = age;
    }
}
kód v čisté Javě

takto nějak by vypadal náš objekt člověka v čisté Javě.
A teď přijde na řadu Lombok.

@Data
@AllArgsConstructor
public class User {
	
    private String name;
    private String surname;
    private int age;
} 
kód s knihovnou Lombok

Kam se všechen ten kód poděl?

Nahradili jsme ho anotacemi. Nemáme zde tedy žádný getter, žádný setter, a už vůbec né konstruktor. Všechny tyto věci se generují při kompilaci podle anotací. Znamená to tedy, že je potřeba si do našich IDE nainstalovat speciální plugin, který bude napovídat o tom, že ty gettery, settery i konstruktory stále existují, pouze jsou generovány až v pozdější fázi.

Díky této knihovně se tedy zvýší vaše efektivita při vývoji, hlavně pokud tvoříte mnoho POJO (Plain Old Java Object).


Zde jsme si tedy vyjmenovali 5 knihoven, které nám usnadní vývoj Javovských programů. To je pro tento článek vše, děkuji že jste to dočetli až sem.

Nenašel jsi zde knihovnu kterou potřebuješ? Můžeš se podívat SEM.