Jak správně vygenerovat Class-Path pro jar soubor

Pokud chcete svou java aplikaci distribuovat pomocí .jar souborů a přitom využíváte nějaké externí knihovny, můžete narazit na problém. Tyto knihovny je třeba přidat do Class-Path atributu v souboru MANIFEST.MF, který se nachází uvnitř jar souboru. Samozřejmě, že to nebudeme dělat ručně, Ant to totiž udělá za nás.

Vypadá to jako triviální záležitost, ale já jsem na tomhle ztvrdl docela dlouho. Začneme tím, že si všechny potřebné knihovny nakopírujeme do adresáře lib, který se bude nacházet v adresáři s jar souborem. Začneme tím, že si vytvoříme fileset, který bude obsahovat cesty ke všem knihovnám v daném adresáři.

<path id="libjars">
     <fileset dir="./lib" >
          <include name="*.jar"/>
     </fileset>
</path>

Teď potřebujeme absolutní cestu k adresáři s knihovnami. Tu lze získat jednoduše z relativní cesty pomocí

<property name="jar-dir" location="./lib />

A teď nastává problém. Máme seznam cest ke knihovnám, ale ty jsou bohužel absolutní. Proto následujícím kódem převedeme tyto absolutní cesty na relativní.

<pathconvert property="relclasspath"
          refid="libjars"
          pathsep=" "
          dirsep="/">
     <map from="${jar-dir}" to="./lib" />
</pathconvert>

Tento kód nahradí absolutní cestu ke složce s knihovnama tou relativní. Jednotlivé cesty oddělí mezerami, takže nyní můžeme relclasspath použít k sestavení jar souboru. Ještě dodám, že všechen kód zmíněný nahoře byste měli psát mimo target elementy!

Jar soubor sestavíme následovně:

<target name="createJar">
     <jar destfile="jarsoubor.jar">
          <fileset dir="${cestaKeClassSouborum}"/>
          <manifest>
               <attribute name="Main-Class" value="${NazevHlavniTridy}"/>
               <attribute name="Class-Path" value="${relclasspath}" />
          </manifest>
     </jar>
</target>

Toť vše. V jar souboru se vytvoří soubor MANIFEST.MF, který bude obsahovat relativní cesty ke knihovnám oddělené mezerami.

Příspěvek byl publikován v rubrice Programování. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

9 komentářů: Jak správně vygenerovat Class-Path pro jar soubor

  1. Sice neprogramuji, takže tento návod je mi de facto k ničemu :), ale koukám, že ses dnes na svém blogu pořádně rozjel s těmi příspěvky. No už bylo načase – poslední dobou to tu nepatrně stagnovalo ;).

  2. dadajax napsal:

    Hups, a já doufal, že si té stagnace nikdo nevšimne 🙂 No jo, přiznávám, že jsem v poslední době na psaní článku neměl moc náladu.

    Na druhou stranu to co jsem předvedl v posledních dvou dnech je zas takový „extrém“. Určitě nehodlám psát tímhle tempem každý den, to byla teď jenom náhoda, že se mi sešlo tolik věcí, které jsem chtěl zveřejnit 🙂

    Tenhle článek je třeba psaný spíše pro mně, protože bych nerad své dnes nabyté zkušenosti zapomněl 🙂

  3. Také si občas některé články píši hlavně pro sebe a vlastně ani nevěřím, že by to někoho mohlo zajímat (třeba takové ty osobní věci, kde jsem kdy byl, atd.). Je to prostě taková veřejná internetová paměť. Svého času jsem si psal deník, abych nezapomněl důležité okamžiky života, ale jednak psát jej pravidelně se mi nechtělo a ostatně stejně jsem jej nijak nepročítal.

    Teď díky blogu tu je taková veřejná paměť, kterou si občas projdu, mohu na ní odkázat z nějakého nového článku (jdou navázat souvislosti mezi minulostí a současností), no a jako bonus tam je to, že by to eventuálně mohlo zajímat, či nějak inspirovat, i někoho jiného.

    Pokud jde o to psaní článků, tak také se mi do toho občas nechce (ostatně teď tu mám rozpracované tuším asi dva a nějak se nemám k jejich dokončení), ale nakonec vždy zvítězí ten pocit „odpovědnosti ke čtenářům“, byť by tím čtenářem jsem měl být třeba jen já sám :). Mimochodem, tak mě napadá, že bych měl začít dělat na dalším článku Best Of 90’s – krátí se mi čas a zítra – vlastně už dnes – má vyjít další pokračování ;).

  4. dadajax napsal:

    Další výhoda je v tom, když se mně někdo známy zeptá na něco, o čem jsem třeba už tady na blogu psal, tak můžu jednoduše poslat link na článek. Ušetří to spoustu času (a mnohdy i nervů :))

    Že ve svých článcích odkazuješ na ty ostatní jsem si už všiml a taky jsem chtěl něco takového zavést. Jenže málokdy si při psaní článku na to vzpomenu. Určitě je to dobrá věc, takhle spojit podobné články. Vždyť už ani sám nevím, co všechno za články tady mám 🙂

  5. Ono to vzájemné prolinkování článků je dobré i pro návštěvnost a pro vyhledáváče. Ostatně nějaké ty SEO optimalizace se přeci jen vyplatí. Já třeba teprve před nedávnem udělal to, aby se u každého článku zobrazoval jeho nadpis v titulku stránky, tak jako to tu máš ty. Do té doby jsem měl nejvíc návštěv z odkazujících stránek a po této drobné změně mám již nadpoloviční návštěvnost z vyhledávačů :).

  6. dadajax napsal:

    Jojo, určitě se to vyplatí. Těmi komentáři tady jsi mi připomněl, že jsem před nějakou dobou omylem vypl plugin „related posts“, který vypíše na konec článku podobné články (nebo pokud žádné nenajde tak náhodné).

    To je taky trochu způsob, jak přimět lidi, aby na tomhle webu zůstali o něco déle 🙂

  7. Pingback: Jak vytvořit jar soubor | Dadajax's weblog

  8. Petr Severa napsal:

    Děkuji za návod, už mi hrozilo, že bych „na tomhle ztvrdl docela dlouho“.

  9. dadajax napsal:

    Petr: Jsem rád že článek pomohl 🙂

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.