Java»Adresare

Adresare

Adresářová struktura projektů v Javě

obsah

  1. Struktura úložiště
  2. Hierarchie balíčků
  3. Adresáře projektů
    1. Problematika adresářů pro vývoj
    2. Adresáře projektů v BlueJ
    3. Adresáře projektů v NetBeans
    4. Adresáře projektů v Eclipse
    5. Sdílení projektu mezi více prostředími
  4. Odkazy

Adresářovou strukturu projektů v Javě ovlivňují tři hlediska:

  1. uložení projektů ve správě verzí včetně podpory vývojových větví (branches) a značek (tags),
  2. struktura adresářů pro vlastní vývoj - adresáře pro zdrojové soubory, přeložené soubory, testy, konfigurační soubory atd.,
  3. 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. na začátku zdrojového souboru je 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ářely 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é byly zdrojové soubory v samostatném adresáři. Existuje více různých doporučení pro organizaci adresářů, typická struktura J2EE projektu vypadá následovně:

/project root directory (run all tools from here)
  build.xmlsestavovací 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.xmlkonfigurační soubor pro vývojový server
    web-live.xmlkonfigurač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čaly 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ářů.

3.2 Adresáře projektů v BlueJ

Prostředí BlueJ je určeno pro malé projekty a příliš nepodporuje rozdělení projektu do různých adresářů. Soubory .class se v BlueJ překládají do adresáře, ve kterém je zdrojový soubor - nelze soubory *.class umístit do jiného adresáře. Také jednotkové (JUnit) testy musí být ve stejném adresáři, ve kterém je třída, která se testuje.

BlueJ si používá zvláštní adresář pro vygenerovanou dokumentace - tu umísťuje do podadresáře doc. Pokud v projektu v BlueJ chcete použít externí knihovny (soubor .jar), tak je vhodné je umístit do podadresáře +libs projektu (součástí názvu adresáře je i plus). Při otevření projektu se tyto knihovny umístí na classpath.

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 strukturu 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 (adresář 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