Adresářová struktura projektů v Javě
Na adresářové struktuře projektů v Javě se podílejí tři hlediska:
- uložení projektů ve správě verzí včetně podpory vývojových větví (branches) a značek (tags),
- struktura adresářů pro vlastní vývoj - adresáře pro zdrojové soubory, přeložené soubory, testy, konfigurační soubory atd.,
- stromová struktura zdrojových souborů v Javě, která je určena hierarchií balíčků (packages),
Tato problematika je mimo rozsah výuky v úvodním kursu programování.
|
1. Struktura úložiště
V úložišti správy verzí je obvykle uloženo více projektů. Pro každý projekt se doporučuje vytvořit:
- trunk (kmen) - zde probíhá hlavní vývoj
- tags (značky) - zde se umisťují značky, které odkazují na důležité milníky ve vývoji projektu (obvyklé je označování dle čísel verzí),
- branches (větve) - zde se provádí alternativní vývoj (např. vývoj varianty pro jiný operační systém, varianta pro jiného zákazníka, zkušební varianty). Má smysl u větších projektů.
Struktura úložiště by mohla vypadat následovně:
Struktura úložiště je závislá i na použitém systému na správu verzí, zde je popsáno doporučení pro Subversion (a zvyklosti v CVS). V dokumentaci k Subversion je následující příklad adresářové struktury:
/
calc/
trunk/
tags/
branches/
calendar/
trunk/
tags/
branches/
spreadsheet/
trunk/
tags/
branches/
...
2. Hierarchie balíčků
Stromová struktura balíčků musí v Javě odpovídat stromové struktuře adresářů, ve kterých jsou uloženy zdrojové soubory. Tj. pokud je třída Hra (tj. zdrojový soubor Hra.java) v balíčku logika (tj. je v něm napsáno na začátku package logika;), tak soubor Hra.java musí být v adresáři, který se jmenuje logika.
Více úrovní balíčků (což je obvyklé) se v názvu odděluje tečkou, čemuž by měla odpovídat opět adresářová struktura. Např. pokud by byla třída Hra v balíčku cz.vse.adventura.logika, tak by soubor Hra.java měl být v adresáři cz/vse/adventura/logika (ve Windows se často používají obrácená lomítka).
Názvy balíčků by měly být malými písmeny (je to doporučení, není to překladačem vyžadováno), měly by obsahovat pouze písmena a číslice (lze i některé další znaky, doporučuji ale nepoužívat). Ve jmenných konvencích od firmy Sun se doporučuje, aby kořenový adresář projektu odpovídal zkratce země (např. cz či us) či lépe doménovému jménu organizace na webu v obráceném pořadí (např. cz.vse či org.junit). Ve zkušebních a výukových projektech se ale toto pravidlo obvykle neuplatňuje.
Následuje obrázek hierarchie balíčků a souborů (obrázek z Eclipse):
Např. třída Start.Java vypadá následovně (všimněte si uvedení balíčku na prvním řádku, nejsou uvedeny komentáře ke kódu):
package main;
import textoverozhrani.TextoveRozhrani;
public class Start {
public static void main(String[] args) {
TextoveRozhrani hra = new TextoveRozhrani();
hra.hraj();
}
}
Některá vývojová prostředí (NetBeans i Eclipse) umožňují roztrhnout soubory z jedné hierarchie balíčků do více adresářů (např. aby testy byly jinde, než vlastní zdrojové soubory, které se testují). Více v další části.
3. Adresáře projektu pro vývoj
3.1 Problematika adresářů pro vývoj
V počátcích programování v Javě se většinou nevytvářeli samostatné adresáře pro jednotlivé části projektu (s výjimkou adresářové struktury pro projekty). V J2EE je stalo součástí projektů i velké množství dalších souborů (html, xml, konfigurační soubory, obrázky, ...) a začala se používat adresářová struktura, ve které byli zdrojové soubory v samostatném adresáři. Existuje více různých doporučení pro orgranizaci adresářů, typická strukturu J2EE projektu vypadá následovně:
/ | project root directory (run all tools from here) |
build.xml | sestavovací soubor pro Ant |
lib/ | knihovny (jar soubory) potřebné pro sestavení aplikace |
src/ | zdrojové soubory v Javě |
web/ | Web soubory (html, jsp, atd.) |
conf/ | konfigurační soubory |
web-dev.xml | konfigurační soubor pro vývojový server |
web-live.xml | konfigurační soubory pro produkční server |
build/ | sem se překládají zdrojové soubory (*.class), kopírují konfigurační soubory (tento adresář může být smazán) |
webapp/ | root projektu při umístění na vývojový/produkční server |
WEB-INF/ | konfigurační soubory (conf/web.xml atd.) |
classes/ | kořenový adresář class souborů |
lib/ | knihovny (jar soubory) potřebné pro běh aplikace (obvykle podmnožina knihoven z /lib) |
test/ | adresář pro jednotkové testy (unit test) |
Principy této adresářové struktury se začali používat i u ostatních typů aplikací. Většina vývojových prostředí tuto adresářovou strukturu podporuje (výjimkou je BlueJ), některé ji téměř vyžadují (NetBeans).
Největší problém je v oddělení testů od zdrojových souborů do samostatných adresářů.
TODO:
3.2 Adresáře projektů v BlueJ
BlueJ je určena pro malé projekty a neumí příliš nepodporuje rozdělení projektu do různých adresářů.
Všechny soubory dává do jednoho adresáře s výjimkou vygenerované dokumentace - tu umisťuje do podadresáře doc.
V BlueJ nelze umístit soubory *.class do jiného adresáře. Jednotkové testy musí být ve stejném adresáři, ve kterém je třída, která se testuje.
3.3 Adresáře projektů v NetBeans
TODO: dopsat popis
Obrázek projektu se zdrojovými soubory a testy v NetBeans (příklad s adventurou z kursu 4it115):
Obrázek přiřazení adresářů se zdrojovými soubory a s testy v NetBeans:
Následující obrázek ukazuje adresářovou sturkturu projektu v NetBeans. Při vytváření projektu (Checkou ze Subversion) jsem umístil adresář s projektem mimo stažený obsah z úložiště. Červenými šipkami jsou zvýrazněny hlavní adresáře (adřesář projektu, adresář ze zdrojovými soubory a adresář s testy) - u kořenových adresářů není zobrazeno vlastní jméno adresáře na disku, jména těchto adresářů jsou vidět na předchozím obrázku). Všimněte si, že v adresáři projektu je podadresář build, ve kterém jsou dva podadresáře. Podadresář class obsahuje hierarchii balíčků a soubory .class odpovídající souborům .java ve zdrojovém adresáři, podadresář test obsahuje hierarchii balíčků a soubory .class odpovídající testům.
3.4 Adresáře projektů v Eclipse
TODO: dopsat popis
Následující obrázek ukazuje adresářovou strukturu projektu v Eclipse, kdy jsou odděleny zdrojové adresáře (src a test) od adresáře pro vývoj. Červenými šipkami jsou zvýrazněny adresáře hlavní adresáře. Všimněte si, že i když jsou odděleny zdrojové adresáře, tak adresář pro sestavení (bin) obsahuje soubory .class od obou zdrojových adresářů.
3.5 Sdílení projektu mezi více prostředími
Je problematické sdílet projekt mezi BlueJ a NetBeans, neboť NetBeans standardně vyžadují umístění testů do samostatného adresáře. Lze to řešit následujícími způsoby (oboje na straně NetBeans):
- v NetBeans nespouštět testy pomocí integrované podpory, ale vytvořit si vlastní třídu na spouštění testů,
- vytvořit si pro NetBeans vlastní sestavovací skript, který zohlední umístění testů do stejného adresáře se zdrojovými soubory (takto to dělá upravená varianta NetBeans pro podporu projektů v BlueJ).
TODO: dopsat sdílení projektů mezi NetBeans a Eclipse, popř. mezi BlueJ a Eclipse.
4. Odkazy