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