No toto je velmi zajímavá diskuse.

Jelikož mám za sebou spolupráci na stavbě několika Linuxových
distribucí na jedné straně, instaláky distribucí velkých Java aplikací
a Javu používám na Linuxu na desktopu i na velkém serveru, zkusím si
přidat také svoji trošku do mlýna.

a) momentálně mám na svém notebooku 14. souborů junit.jar, a to na něm
vyvíjím jednu J2EE aplikaci v IntelliJ a jinak ho používám jako Osobní
Počítač :-) Nechci ani vědět, kolik jich mám na vývojářském stroji,
kde se to Java aplikacemi jenom hemží.

b) v OpenSuSE mám možnost nainstalovat si kompletní Java prostředí,
ale k vývoji bych to nepoužil.

c) oproti tomu Ubuntu má systém Java balíků propracovaný poměrně hezky
a pro používání aplikací nebo jednoduchý vývoj je to dostačující. Sám
teď uvažuji o jednoduchém balíku, který bude integrovat balíky z
distribuce do systému globálních knihoven, abych se nemusel o ně nijak
dramaticky starat.

d) úzus z C světa o major minor a release verzích (převzaný světem
Perlu, Pythonu či Ruby) ve světě Javy moc nefunguje. Změna chování i
překopání API mezi minor verzemi je celkem běžný jev. Proč? Nikdo to
neřeší.

e) díky poměrně překotném vývoji Javích aplikací a přecházení na stále
novější a novější verze balíků se stěží najdou dvě "velké" aplikace,
které by mohly kompletně sdílet všechny balíky.

f) je třeba si uvědomit, že balíčkovací systémy Linuxových distribucí
jsou navrženy s jediným podstatným úmyslem - umožnit VŠEM UŽIVATELŮM
TÉHOŽ POČÍTAČE používat stovky a tisíce aplikací, které nebudou mezi
sebou vzájemně kolidovat a budou co nejbezpečnější a nejstabilnější. A
to na úkor toho, že VŠICHNI uživatelé budou používat stejnou, ne
zrovna nejaktuálnější verzi jejich oblíbené aplikace.

g) I uživatelé Linuxových distribucí mají možnost používat vlastní
verze vlastních aplikací. Ve všech distribucích je k dispozici Bitva o
Wesnoth, Céčková strategická fantasy hra, na které se také trochu
podílím, ale přesto ji nepoužívám - vždy v den, kdy vyjde nová verze,
si ji už u sebe překládám.

Co z toho všeho plyne?

Nějaký balíčkovací systém pro Javu není vůbec zlá myšlenka. Jinak by
tu nebyl JPackage či repozitáře Mavenu. Díky jednoduchému způsobu
distribuce knihoven má každý vývojář Javích aplikací poměrně volné
ruce v používání knihoven a není v ničích silách donutit tvůrce
aplikací, aby sdíleli stejné verze knihoven. Z toho plyne, že takový
balíčkovací systém, který by měl být šířeji použitelný, musí
podporovat více verzí téže knihovny, a tedy nemůže být bez těžkého
ohýbání použit systém té které distribuce.
Proto je systém ala CPAN či GEMS naprosto dostatečný. Jediné, co by
mne dávalo smysl, je sdílená lokální maven repository s možností
jednotné instalace. Co by se mi ale líbilo by byl systém obdobný
UNIXovým modulům, které by jednoduše rozšiřovaly CLASSPATH a tedy
klasickým Javím způsobem umožňovaly sdílet knihovny napříč aplikacemi.

Odpovedet emailem