Nejlepší nástroje na programování v Javě

14. 3. 2011

Sdílet

Eclipse, IntelliJ IDEA, NetBeans i Oracle JDeveloper pokračují v tradici bohatých a pestrých vývojových nástrojů pro Javu.

Dobří programátoři vždy podrobně a intimně znají svá vývojová prostředí, ať už úplná IDE (Integrated Development Environment), jako ta, která dále popisujeme, nebo obyčejné editory jako emacs a vi nebo vim. To by mohlo svádět k dojmu, že vývojáři nebudou ochotni měnit svá IDE, ale průzkumy naopak ukazují, že mnoho z nich své nástroje střídá každých pár let.

Migraci někdy vyvolají nároky pracoviště, jindy k ní dochází se změnou stylu práce. Náš článek by měl programátorům usnadnit poznání odlišností vedoucích javovských IDE: Eclipse, JetBrains IntelliJ IDEA, NetBeans a Oracle JDeveloperu.

Tato vývojová prostředí odrážejí pozoruhodnou bohatost a vyspělost prostředků pro Javu. Všechny mají výbornou podporu pro programování a vývoj, silně podporují refaktoring, kontrolu syntaxe a ladění. IDE jsou obecně rychlá a schopna zvládat velké implementace jazyka bez viditelných potíží. Většina z nich dovoluje aplikovat projekty z IDE přímo na servery a dělat vzdálené ladění přímo z vývojového systému.

Za posledních pět let se trochu změnily charakteristiky, jimiž se produkty liší. Zatímco v minulosti se nástroje různí rozsahem vlastností pro vývoj, dnes jsou hlavní odlišnosti ve snadnosti použití, kvalitě dokumentace a nápovědy a možnosti plug-inů.

Z vývojových prostředí se stále více stávají základny pro plug-iny poskytované externími dodavateli. Obzvlášť Eclipse Foundation už dlouho podporuje tento trend. Je to patrné v IDE Eclipse, které těží z podpory většiny technologií, o jaké mohou mít vývojáři Javy zájem. Ovšem tato orientace na doplňky je na úkor snadnosti použití. Jak ukážeme dále při popisu Eclipse, její tvůrci usnadnili psaní plug-inů jen tím, že část práce přesunuli na uživatele.

NetBeans a IntelliJ IDEA lépe vyvážily počet plug-inů se snadností použití. Obě jich mají dost, ale zároveň se snaží práci programátora zpříjemnit. Proto je hodnotíme lépe. Také s JDeveloperem se snadno zachází, ale jeho plug-inů je málo. Navíc těsné spojení se softwarem Oracle jej znevýhodňuje pro organizace, které závisejí na softwaru od mnoha jiných dodavatelů. Kdyby nebylo toto omezení tak pronikavě v produktu patrné, měl by asi víc plug-inů a byl by silnějším konkurentem pro ostatní IDE z našeho přehledu.

Vývoj IDE jako základny pro plug-iny přinesl i lepší podporu pro ostatní jazyky. Tato vývojová prostředí podporují jazyky běžně používané s javovskými aplikacemi (JSF, HTML, CSS, XML atd.). Některá podporují skriptovací jazyky JVM (jako Groovy a JRuby), jazyky mimo javovskou doménu (jako C/C++ a PHP) a modelovací jazyky (UML). V další části článku se podíváme na produkty se zvláštním zřetelem na snadnost použití a programovací schopnosti. Ty považujeme za hlavní faktory rozhodující o produktivitě a spokojenosti uživatelů. Skoro stejně důležitý je počet plug-inů.

Eclipse 3.6
Eclipse je javové IDE, dominantní podle všech hledisek, zvláště podle toho, kolik a jak využívá plug-inů. Za svou oblíbenost vděčí rozhodnutí svého původního rodiče, IBM, oddělit ji do zvláštní nadace, ve které mohla Velká modrá podporovat další vývoj a kde zároveň mohla Eclipse využít podpory ostatních firem, které by jinak odmítaly přispívat do produktu patřícího cizí firmě. Tato strategie se dobře vyplatila, částečně proto, že podpora byla štědrá a také díky výběru řídicích pracovníků, kteří odvedli skvělou práci při jednáních s dalšími organizacemi, čímž vybudovali komunitu, která řídí postup dílčích projektů a řeší neshody.

Důležitost nezávislosti vlastníka Eclipse se ukázala nedávno, když Google veřejně oznámil, že toto IDE vybral pro vývoj Androidu. NetBeans Oraclu mohly kdysi být kandidátem na tuto pozici, ale nedávný spor Oraclu s Googlem definitivně takový vývoj znemožnil. Politika má vliv i na trh a Eclipse vždy hrála s touto kartou šikovně.

Co Eclipse schází, je špičková technologie. Eclipse byla dlouho průměrným javovským IDE, které mnoho lidí používá, ale málo miluje. Po letech se postupně zlepšila na základě každoročních verzí pečlivě synchronizovaných s hlavními komponentami a dodávaných na trh každý červen. Letošní verze 3.6 označená jako Helios přidává několik nových vlastností.

Sestava Eclipse je v mnoha ohledech neobvyklá svou unikátností, z čehož plyne, že znalost práce v jiných IDE se nedá pro Eclipse použít. Ústřední koncept je v práci s perspektivami, což je jiný způsob reprezentace panelů a rozložení IDE. Tyto perspektivy mohou být někdy velmi odlišné v závislosti na konkrétní činnosti. Tato architektura nahrává vývoji plug-inů, ale za cenu nepohodlí pro uživatele, který se musí vypořádat s někdy dramaticky odlišnými uspořádáními, lišícími se podle práce, kterou právě dělá.

V základním vývojovém prostředí Eclipse ignoruje konvence a nutí uživatele, aby se přizpůsobil její vizi. Než vytvoříte projekt, musíte například nejprve udělat pracovní prostředí. V něm (což je koncept, který nemá v jiných IDE obdoby) tvoříte své projekty. Můžete také dělat pracovní sestavy, což jsou části pracovního prostředí seskupené jako samostatné entity. Tato závislost na pracovních prostředích znamená, že tvorba a migrace projektů může být obtížný proces, špatně podporovaný průvodci s neobvyklými a nevysvětlenými možnostmi. Koncept „prostě to udělej“ v Eclipse nefunguje. Skoro všechno vyžaduje vyplnění dialogů nebo výběr voleb, které jsou buď neodlišitelné, nebo neintuitivní.

Vezměme si například smíšený projekt Javy a Groovy, importovaný do Eclipse bez plug-inu pro Groovy. Když kliknete pravým tlačítkem na soubor Groovy, abyste ho editovali, nabízí menu tyto možnosti: Textový editor, systémový editor, místní editor a defaultní editor. Protože k tomu není žádná nápověda, při výběru jen hádáte. A od toho okamžiku to jde s kopce. Když kliknete na systémový editor, pokouší se Eclipse skript spustit, ne jej editovat. Stručně řečeno většina uživatelů se musí spolehnout na svou těžce nabytou znalost, co je co, spíš než na intuitivní navigaci po možnostech.

Aby se to naučili, jsou uživatelé silně závislí na nápovědě, která se za ty roky významně zlepšila, i když má stále ještě nedostatky. Kromě toho mnoho chybových hlášení, které byly u Eclipse běžné v dřívějších dialozích, téměř zmizelo. IDE se nepochybně od verze k verzi zlepšuje, ale ještě to chce to, co NetBeans dostaly před pár lety, přepsat a zásadně změnit jádro programovacích činností.

Dodali bychom, že koncepce Eclipse je problémem především v oblasti Javy, kde soupeří s velmi kvalitní konkurencí, takže její nedostatky jsou tím viditelnější. V jiných oblastech, např. vývoje pro C, kde je málo dobrých IDE, je Eclipse populární a přijímána bez výhrad. Pro vývoj C++ na Linux je to zřejmě hlavní IDE.

Přes tyto nedostatky nabízí používání Eclipse téměř neomezené možnosti a úžasnou škálovatelnost. Zdánlivě neomezené eventuality jsou výsledkem velkého množství plug-inů. A těch je tolik proto, že většina jejich návrhářů podporuje především Eclipse. Mnoho firem nikdy nedává své produkty na jiné platformy. Dokonce i populární plug-iny, jako výborný manažer úloh Mylyn, jsou často dostupné jen pro Eclipse.

V minulosti byla správa plug-inů v Eclipse pro uživatele problémem, protože jeden plug-in často závisí na jiných plug-inech, které navíc musí mít určité číslo verze. Eclipse se tomuto úkolu trvale věnuje. V letošní verzi Eclipse MarketPlace tento problém řeší vyhledáním plug-inu, který by mohl být použitelný.

JetBrain IntelliJ IDEA 9.0.3
IntelliJ firmy JetBrain existuje ve dvou provedeních, jako placená verze, kterou tu popíšeme, a bezplatná open source Community Edition, která nabízí základní programovací možnosti pro Javu. Protože placená verze IntelliJ konkuruje  mnoha bezplatným produktům, musí své přednosti neustále obhajovat. Dělá to častějšími inovacemi než jiné IDE. Jeho dlouhá historie inovací mu vyhrála početné příznivce, kteří mají produkt v oblibě. A je vskutku co milovat.

Návrháři IntelliJ mají cit pro nastupující trendy v javovské komunitě a rychle doplňují podporu nových, žhavých produktů. IntelliJ byl například jedním z prvních řešení s robustní podporou Groovy a Grails. Byl jedním z prvních, kdo nabízel vyspělou podporu pro JavaScript včetně debuggeru. Kde zrovna nezaujímají na trhu vedoucí pozici, jsou druzí a často s lepší podporou. Mají dokonalou integraci pro Ant a Maven, podporu pro Spring a možnost skákat z programování Javy do Adobe Flexu a PHP, v tom samém IDE.

Ale vývojáři si cení IntelliJ víc pro jeho schopnosti než pro řadu podporovaných technologií. Před lety to například bylo první IDE, které poskytovalo dialogové okno pro porovnání předpokládaného a skutečného výstupu z testované jednotky, se zvýrazněním odlišností.

Dnes má možnosti a vlastnosti, které jsou všeobecně lépe implementované než podobné věci u konkurence, stejně jako vlastnosti naprosto unikátní. Do poslední kategorie se řadí větší počet možných refaktoringů programu, než nabízí většina jiných nástrojů. Má navíc zabudovanou kontrolu syntaxe, která nejen hledá chyby, ale také místa, která sice pracují správně, ale jsou napsaná neohrabaně: příliš složité funkce nebo testování vždy pravdivé podmínky. Kromě toho nabízí IntelliJ svůj vlastní nástroj sledování programu, který zobrazuje v IDE, které řádky programu byly provedeny daným počtem testů. Pokud vás zajímají jiné možnosti, IntelliJ má zabudován open source produkt EMMA a má plug-iny pro všechny ostatní sledovací nástroje.

Do kategorie jedinečných vlastností patří i sledování duplicitního kódu, obzvlášť špatně napsaného programu, který se ve velkém projektu těžko hledá. IntelliJ má také nástroj na analýzu závislostí, který v tabulce ukazuje metody závislé na jiných a které na kterých závisejí. Tento popis ale nevystihuje pocit, který při užívání IntelliJ máte. Je to software, který neustále překvapuje tím, že předvídá potřeby programátora. Například všechny IDE zde probrané mají vyskakovací okno nápovědy, spouštěné, když píšete jméno metody. V IntelliJ tato vlastnost (která se jmenuje automatické doplňování) využívá kontextuální informaci z programu pro odhad toho, co se má umístit do prvních míst seznamu, takže nemusíte procházet mnoha možnostmi. Odhad je správný s nečekanou účinností, někdy to vypadá až nadpřirozeně.

IntelliJ má také jistá omezení. Nejcitelnější je dlouhodobý nedostatek dobré dokumentace. Zjistit, jak se používají vyspělé možnosti nebo vyřešit nějaký problém, je nepochybně frustrující. Naštěstí e-mailové dotazy zodpovídají sami vývojáři. To znamená, že stačí položit jednu otázku, abyste dostali správnou odpověď. Jediný háček je v tom, že tito vývojáři jsou v Rusku, z čehož plyne jistý časový posuv. Dalším problémem je pomalý start. Tento nedostatek byl ve verzi 9.0 poněkud zmenšen, ale přesto je únavně pomalý.

Přes tyto nedostatky je IntelliJ výborným IDE, ukazujícím, jak s výtečně zvládnutým řemeslem lze udělat komerční produkt, který úspěšně soupeří s bezplatnou konkurencí.

NetBeans 6.9
NetBeans udělal v posledních pěti letech velké pokroky v podílu na trhu, alespoň podle počtu použití. Podle každoročního průzkumu IDE Javy, publikovaného BZ Research, byl NetBeans používán v roce 2005 na 17,9 % míst. V letošním roce se toto číslo zdvojnásobilo na 35,7 %. To je za toto období zdaleka nejvyšší přírůstek používání jakéhokoliv IDE pro Javu. Co do popularity je teď NetBeans bezpečně na druhém místě za Eclipse.

Za část tohoto úspěchu může pečlivá pozornost jeho bývalé mateřské společnosti, Sun Microsystems. Když začátkem letošního roku Oracle získal Sun, panovaly ve vývojářské komunitě Javy obavy o osud NetBeans. Obavy zesílily, když Oracle zrušil podporu otevřených projektů Sun, jako OpenSolaris, a hostování Kenai. Osud NetBeans se zdál tak nejistý, že jsme odložili toto srovnání do doby, než jsme získali jistotu o tom, jak s IDE naloží Oracle.

Rozhodnutí Oraclu pokračovat v podpoře NetBeans nám tlumočil Duncan Mills, vedoucí managementu vývojářských prostředků. Řekl: „Aktivně podporujeme jak JDeveloper, tak NetBeans. JDeveloper se používá ve firmě a pro podnikové zákazníky, kteří potřebují nástroj se silnou podporou řešení Oracle Fusion Middleware. NetBeans je naše nabídka pro uživatele, kteří chtějí prostředí pro vývoj s jinými technologiemi. Doufáme, že případně přejdou na řešení Oracle a JDeveloper.“ Tato formulace zajišťuje, že můžeme s jistotou očekávat aktivní vývoj NetBeans. Jak bylo zmíněno v úvodu, vzhledem k nedávným sporům Oraclu kolem Javy může být pokračování podpory dvousečným mečem.

NetBeans je charakteristický snadným použitím a tendencí k lehkosti a jednoduchosti. Dokonce i download má vlastnosti, které potěší. Například, pro download použijete stránku s tabulkou různých edic (kombinací plug-inů a platforem) předkonfigurovaných pro určité úkoly. Stáhnete si to, co chcete. Eclipse má podobnou možnost, zatímco IntelliJ a JDeveloper poskytují jen jednotný, univerzální download.

Výběr z tabulky možností charakterizuje jednu z výrazných vlastností NetBeans: podporu jazyků, které jiné IDE ignorují, jmenovitě JRuby a JavaFX. (NetBeans má také zabudovanou podporu PHP a C/C++.) JRuby byl původně vyvinutý firmou Sun, což vysvětluje jeho důležitost v NetBeans. Charles Nutter, jeden z vedoucích vývojářů JRuby, potvrdil kvalitu podpory jazyků v NetBeans v nedávné konverzaci. JavaFX, desktopový skriptovací jazyk, je podporován proto, že Oracle hodně přispěl k této technologii. (I když existuje značná skepse, zda jazyk vůbec kdy získá popularitu, takže jeho začlenění je více pro oko než jako následek reálné uživatelské potřeby.) Naneštěstí NetBeans přestal podporovat UML diagramy, což donedávna ještě dělal.

NetBeans byl před několika roky kompletně přestavěn a stále má jednoduchost a snadnost navigace, kterou tehdy získal. Věci fungují, jak je třeba, a požadované volby je jen zřídka těžké najít. Na rozdíl od IntelliJ, který dělá při zapisování jen syntaktickou analýzu, NetBeans neustále kompiluje v pozadí. (Eclipse má podobnou možnost jako nastavitelnou volbu.) To znamená, že jakmile dokončíte editaci, můžete program spustit. NetBeans také dělá v pozadí pro každý projekt Ant buildfile. Je to pro vývojáře užitečný prostředek, zaručuje, že build vytvořený tímto IDE může vývojář přesně reprodukovat.

NetBeans se dodává se zabudovaným profilerem, testovacím generátorem JUnit (který dělá základní testy, jež sice nestačí pro pečlivé otestování programu, ale pro začátek vyhoví), a průvodcem pro řetězce v cizích jazycích. Pro větší rozsah práce je download včetně Apache Tomcat nebo otevřeného serveru GlassFish. K monitorování běžících aplikací NetBeans jedinečně integruje podporu pro JMX (Java Management Extensions) a JConsole.

Plug-inů pro NetBeans je výrazně méně než u Eclipse (a zhruba stejně jako u IntelliJ IDEA). Stará moudrost, že plug-iny Eclipse nakonec migrují k méně užívaným platformám, je teď skutečností zpochybněná. Jak jsme se už zmínili, mnoho nástrojů se dnes píše pro Eclipse a dál nejsou portované. Pokud NetBeans budou pokračovat v  tempu, v jakém získávají nové stoupence v posledních pěti letech, věci se změní, ale v současnosti je nedostatek plug-inů největším omezením NetBeans. Ve všech ostatních ohledech je NetBeans nejvíc přátelsky orientovaným IDE pro Javu.

Oracle JDeveloper Studio 11g (11.1.1.3.0)
JDeveloper Studio od Oraclu se jedinečně liší od jiných řešení, která jsme testovali.  Jde svou cestou a je víc soustředěný na agendu Oraclu než na potřeby nespadající do zájmů Oraclu. Spíš než jako bezplatný produkt s uzavřeným zdrojem je třeba jej vidět jako vnitřní vývojový prostředek Oraclu, nabízený zdarma každému, komu se může hodit.

Agenda Oraclu velmi zužuje oblast jeho zaměření, a proto ho v některých ohledech omezuje, ale následkem  toho je zase produkt  v jiných směrech velmi efektivní.  Vazby na software Oraclu jsou patrné ve všech aspektech IDE, dokonce i v číslování verzí, které nemohou předstihnout ústřední produkt Oraclu, databázi. S tímto omezením se číslo verze musí roztáhnout přes víc desetinných míst. V tomto procesu se pak obvyklá informace o tom, které verze jsou významným zlepšením produktu, zcela ztratí.

Instalace je jednoduchá, ale konečný produkt je kupodivu registrován na systémech, na které se nainstaluje, pod jménem "Oracle Fusion Middleware“. Většina lidí nepovažuje IDE za middleware, ale tato kategorizace zdůrazňuje podstatnou podporu JDeveloperu pro vývoj middleware jako součásti rozsáhlých možností pro enterprise. Kupříkladu JDeveloper má velkou podporu pro ADF (Application Development Framework), soubor komponent Java Server Faces (JSF), preferovaných Oraclem. Podporuje také TopLink, prezentační vrstvu, kterou Oracle koupil od BEA ještě předtím, než získal BEA docela, a nabízí rozsáhlé nástroje Java EE včetně zabudované verze WebLogic serveru, který se může spustit a spravovat zevnitř IDE.

Orientace jen na Oracle u JDeveloperu funguje, pokud se striktně držíte spektra produktů Oraclu odshora dolů. Pokud například zaměníte JSF komponenty Oraclu v ADF za komponenty jiného výrobce, možnosti vývoje uživatelského rozhraní metodou WYSIWYG (What You See Is What You Get) se značně omezí.

Přesto je JDeveloper pohotovější než jiné produkty, které jsme testovali, a má výbornou nápovědu. Po stisknutí klávesové kombinace pro nápovědu okamžitě vyskočí okno s informací úzce spojenou se stránkou nebo dialogem, se kterým pracujete. Tato kontextově orientovaná nápověda je rychlejší a lepší než u jiných IDE. JDeveloper má také lahůdky jako zabudovaný profiler, který umí měřit výkon nebo spotřebu paměti. Jeho kontrola syntaxe našla chybu, kterou oslavovaný profilovací nástroj IntelliJ IDEA nezjistil. V oblastech, na které se Oracle soustředil, udělala tato společnost dobrou práci.

Jednou z oblastí, které stály mimo zájem společnosti a kterou JDeveloper odkrývá, je vytvoření ekosystému plug-inů. Žádný z ostatních testovaných produktů nemá tak málo plug-inů, a většinu z existujících napsal Oracle. Třetí strany prakticky chybí. Například, nenašli jsme jediný plug-in pro code coverage analysis, který by pracoval v JDeveloperu. To je vážné omezení.
Oracle dal najevo, že počítá s JDeveloperem jako hlavním vývojovým prostředím společnosti. Pro organizace věrné produktům Oraclu je to rozumná volba. Ale všichni ostatní zákazníci by asi dali přednost jinému z  IDE, jež jsou tu prezentovány.