Java FAQ

Jak umieścić wszystkie pliki .class mojego programu w jednym pliku .jar

ŁF

spakuj pliki zipem z kompresją ustawioną na storing, poza tym umieść w archiwum plik
meta-inf/manifest.mf
o zawartości mniej więcej jak ta poniżej:

Manifest-Version: 1.0
Created-By: 1.4.2_02 (Sun Microsystems Inc.)
Main-Class: nazwa_twojej_głównej_klasy

To jest uproszczona wersja...ja polecam zastosowac eclipse->export->jar albo lepiej...anta.
Ant to narzedzie wspomagajace budowanie aplikacji (do nabycia http://ant.apache.org/)
Ponizej znajduje sie prosty buld.xml, ktory przeprowadzi automatycznie caly proces, czyli
-wyczysci strukture katalogow
-przeprowadzi kompilacje
-zbuduje jarka
-usunie zbedne katalogi

<project name="proj" 
    default="EndCleanUp" >

<property name="dist" location="deploy" />
<property name="bin" location="bin/" />
<property name="src" location="src"/>
<property name="libs" location="lib"/>
<property name="build" location="build"/>
<property name="batch" location="batch"/>
<property name="JARName" value="proj"/>

    <target name="clean">
        <delete dir="${dist}"/>
        <delete dir="${bin}"/>
        <delete dir="${build}"/>
    </target>

    <target name="init" depends="clean">
        <mkdir dir="${dist}"/>
        <mkdir dir="${bin}"/>
        <mkdir dir="${build}"/>
        <mkdir dir="${build}/lib"/>
    </target>

    <target name="compile" depends="init">
        <javac srcdir="${src}" destdir="${bin}" source="1.5" classpath="${libs}/externalLib.jar"/>
    </target>

    <target name="CopyToBuild" depends="compile">
        <copy todir="${build}">
            <fileset dir="${bin}"/>
        </copy>

        <copy todir="${build}/lib">
            <fileset dir="${libs}"/>
        </copy>
    </target>

    <target name="CreateJAR" depends="CopyToBuild">
        <jar jarfile="${dist}/${JARName}.jar" basedir="${build}">
            <manifest>
                <attribute name="Class-Path" value="../lib/externalLib.jar"/>   
                <attribute name="Built-By" value="${user.name}"/>
                <attribute name="Main-Class" value="KlasaStartowa"/>
            </manifest>
        </jar>
    </target>

    <target name="EndCleanUp" depends="CreateJAR">
        <copy todir="${dist}">
            <fileset dir="${batch}"/>
        </copy>

        <delete dir="${build}"/>
    </target>

</project>

komentarze targoetow:
-clean - usuwa katalogi i co za tym idzie pliki w nich znajdujace sie
-init - tworzy strukture katalogow
-compile - kompilacja zrodel
-copyToBuild - kopiowanie plikow ktore maja sie znalezc w jarku, czyli zrodel i jeszcze jednej dodatkowej libki
-createJAR - tworzenie jarka z tego co jest w build
-endcleanup - usuniecie build i skopiowanie na przyklad run.bat czy cos w tym stylu

pozdrawiam i zycze powodzenia w mieszaniu z jarkami

FAQ

7 komentarzy

OK to jeszcze tylko wersję mavenową dorzucę wieczorkiem późnym....

Czy to napewno wszystko ?? :)

Marooned: lam pełno wszędzie... 90% jest z Tobą na roku... znam to uczucie :>

jedno co mnie się nie podoba w tym zapisie to zbędność zapisu created by. a po za tym luuuuuz

Ostatnio na zajęciach pół grupy (kilkanaście osób) kłóciło się ze mną, jak twierdziłem, że .jar to zwykłe zipy jeśli chodzi o format. Ale miałem kulankę [rotfl].
I tylko facet pobłażliwie na nich patrzył w milczeniu :]

banda pedałów ;]