Retrotranslator - hladce z Javy 1.5 do 1.4

Řada z vás si určitě řekne, co to ten Fura vytahuje za prehistorická témata. V době, kdy se už živě diskutuje o tom, co bude v Javě 1.7, rozebírá přechod z verze 1.4 na verzi 1.5. Možná vás to překvapí, ale v našem prostředí (server web aplikace), provozujeme ještě řadu instalací na verzi 1.4 a možnosti upgradu v nedohlednu. Proto je pro nás stále aktuální udržovat / vytvářet sdílené knihovny i pro 1.4 verzi Javy. Hledali jsme a zkoušeli tedy nějakou co nejméně bolestivou cestu, jak využít možností vyšších verzí se zachováním zpětné přenositelnosti. A naším (mým :-) ) favoritem se stal Retrotranslator. Více o jeho použití se dočtete v tomto článku.

Použití

Retrotranslator umožňuje konvertovat knihovny zkompilované v Javě 1.5 a 1.6 pro běh v Javě 1.4. Konverze si poradí s generikami, anotacemi, reflexí nad anotacemi, enumy, autoboxingem, novými for-each deklaracemi, varargs, kovariantními návratovými typy, statickými importy, novými funkcemi v kolekcích a dalšími fíčurkami. Retrotranslator dokáže navíc správně zkonvertovat i použití určité omezené části Java 1.5 / 1.6 API.

Pro konverzi nepotřebujete mít k dispozici zdrojové kódy, celý převod probíhá na úrovni zkompilovaného kódu (class, jar). Úplně nejjednodušší způsob konverze je přes příkazový řádek:

Vyrobený jar již je možné vložit na classpath aplikace běžící pod Javou 1.4. K tomuto jaru (popř. více takto zkonvertovaným jarům) je nutné na classpath dostat ještě retrotranslator-runtime-n.n.n.jar, který obsahuje pomocné třídy, které zastupují funkcionalitu vyšší verze Javy.

Při použití maven pro buildování vám bude stačit snippet:

Také je možné potřebné classy (tzn. ty co jsou součástí balíku retrotranslator-runtime) zakompilovat přímo do konvertované knihovny do vámi určené package (k tomu slouží parametr -embed ).

Podpora

Výhodu retrotranslatoru vidím v dalších doprovodných nástrojích. Jednak existuje plugin do IntelliJ Idea, avšak důležité je hlavně jednoduché použití v buildovacích nástrojích jako je Ant nebo Maven.

V našem případě je integrace do buildovacího procesu směšně jednoduchá a zajistí ji následující snippet:

Bohužel plugin v současné verzi ještě neumí includovat runtime classy do výsledného artefaktu. V dokumentaci je sice deklarováno, že by to plugin měl umět, ale po krátkém průzkumu Groovy kódu pluginu jsem došel k závěru, že realita je jiná. Doufejme, že při vydání stabilní verze už tato funkce bude doplněna.

Parametr attach = true zajistí, že se retranslated jar dostane spolu s původním jarem do remotní repository.

Zkušenosti

Dosavadní zkušenosti s Retrotranslatorem máme dobré. S jeho pomocí jsme převedli více jak desítku externích knihoven (SubEthaMail kupříkladu) a také udržujeme JDK 1.4 verze několika vlastních knihoven a zatím jsme nenarazili na žádný problém (všechny testy svítí zelenou ;-) ). Doporučení Retrotranslatoru také najdete v dokumentaci Stripes Frameworku, který je také JDK 1.5 only.

Pokud máte nějaké zkušenosti vy - budu rád, když se o ně podělíte v komentářích.

Zdroje

Alternativy

Podělte se s ostatními:
  • Digg
  • del.icio.us
  • De.lirio.us
  • Technorati
Ohodnoťte článek:
Takovéhle články už radši ne!Nic nového pod sluncem.Průměr - obsahuje zajímavé střípky informací.Hodnotný článek - lecos nového jsem se dozvěděl.Skvělý článek - informace se mi dost hodí. (4 hlasů, průměrně: 5 z 5)
Loading ... Loading ...

1 reakce to “Retrotranslator - hladce z Javy 1.5 do 1.4”

  1. Michal Palička:

    V minulosti jsme o použití Retrotranslatoru (RT) uvažovali, ale nakonec jsme od toho upustili. Převážily obavy z možných potíží. Pokud by při převodu tříd nastal nějaký problém (např. bug v RT), těžko bychom jej uměli rozumně najít a vyřešit. Celý projekt by tím byl vystaven značnému riziku.
    Každopádně rád slyším, že máte s RT dobré zkušenosti. Možná se touto cestou přece jen někdy v budoucnu vydáme.

Nechte zde svůj komentář

Opište prosím text z obrázku: