Java » Czyli często zadawane pytania

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

  • 2008-03-17 16:33
  • 7 komentarzy
  • 914 odsłon
  • Oceń ten tekst jako pierwszy
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

7 komentarzy

Koziołek 2008-03-17 17:45

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

damianromek 2007-12-18 12:21

Czy to napewno wszystko ?? :)

czarownik 2006-07-26 16:54

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

jmail 2005-09-08 16:10

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

Marooned 2004-11-21 17:14

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 :]

ŁF 2004-11-22 01:19

banda pedałów ;]