# ant: Jar in Jar



## vogella (8. Mrz 2007)

Hallo,

hat jemand mal ein Beispiel wie ich per Ant fremde libs (.jar) in das eigene jar miteinbindet.

Der manuelle Prozeß ist ja hier beschrieben: 
www.java-forum.org/de/viewtopic.php?t=13075

Ich würde das gerne automatisieren. Im Netz habe ich gefunden, daß es wohl mit "nested zipfilesets" im ant geht, habe aber dazu keine Beispiele via google gefunden. 

Viele Grüße, Lars


----------



## kama (8. Mrz 2007)

Hallo,

schon mal das Manual zu Ant durchgelesen?


```
<jar destfile="${dir.build}/${file.jar}">
	<manifest>
		<attribute name="Built-By" value="XXXXXXXXj" />
		<attribute name="Specification-Title" value="xxxx" />
		<attribute name="Specification-Version" value="${software.major}.${software.minor}.${software.patch}" />
		<attribute name="Specification-Vendor" value="yyyyy" />
		<attribute name="Implementation-Title" value="zzzz" />
		<attribute name="Implementation-Version" value="${revision} ${TODAY}" />
		<attribute name="Implementation-Vendor" value="HHHH" />
	</manifest>
	<zipfileset dir="${dir.lib}" prefix="lib">
		
		<include name="**/commons-email*.jar" />
		<include name="**/commons-pool*.jar" />
		<include name="**/commons-dbcp*.jar" />
		<include name="**/geronimo-spec-jta*.jar" />
		<include name="**/dom4j*.jar" />
	</zipfileset>

	<zipfileset dir="${dir.global.lib}" prefix="lib">
		
		<include name="**/commons-logging*.jar" />
		<include name="**/commons-lang*.jar" />
		<include name="**/commons-collection*.jar" />
		<include name="**/poi*.jar" />
	</zipfileset>
</jar>
```

MfG
Karl Heinz Marbaise


----------



## vogella (13. Mrz 2007)

Hallo Karl Heinz,

danke für die Hilfe. 

Zu Deiner Frage: Ja, ich hatte mir die Taskbeschreibung von Jar im ant Manuel durchgelesen. Hier war aber keine verwertbare Info bzgl Zipfileset für mich zu finden.

Viele Grüße, Lars


----------



## vogella (13. Mrz 2007)

Hallo,

ich muß mich korrigieren, geht doch nicht. Was jetzt passiert, ist das die Jar in mein neues Jar kopiert werden. Die müssten aber noch entpacket werden (wie im Link von oben beschrieben).

Weiß jemand wie das geht?

Viele Grüße, Lars



```
<echo> Create the jar file </echo>
		<jar destfile="${deploy}/${jarfile}.jar" basedir="${build}" manifest="${manifest}">
			<fileset dir="${build}">
				<patternset refid="forjar" />
			</fileset>
			<zipfileset dir="${lib}" prefix="lib">
				
				<include name="**/jcommon*.jar" />
				<include name="**/jfreechart*.jar" />
				<include name="**/log4j*.jar" />
				<include name="**/itext*.jar" />
				<include name="**/derby*.jar" />
			</zipfileset>
		</jar>
```


----------



## kama (13. Mrz 2007)

Hallo,



			
				vogella hat gesagt.:
			
		

> Hallo,
> 
> ich muß mich korrigieren, geht doch nicht. Was jetzt passiert, ist das die Jar in mein neues Jar kopiert werden. Die müssten aber noch entpacket werden (wie im Link von oben beschrieben).


Und warum müssen die noch entpackt werden?

MfG
Karl Heinz Marbaise


----------



## vogella (13. Mrz 2007)

Hallo,

Zitat aus der FAQ dieses Forums (link von oben).



> Die Erläuterungen zu Manifest.MF -> also was da drinnen stehen mußt, solltet ihr schon wissen, ich gehe hier nur drauf ein, wie ich ein Jar File via dem jar Befehl in ein anderes Jar File packen kann.
> 
> Also grundsätzlich geht das eigentlich gar nicht, man muss das Jar File (ich nehme hier den neueste ODBC-Treiber von Oracle - http://download.oracle.com/otn/utilities_drivers/jdbc/9205/ojdbc14.jar ) entpacken und wieder reinstecken!




Viele Grüße, Lars


----------



## kama (13. Mrz 2007)

Hallo,



			
				vogella hat gesagt.:
			
		

> Zitat aus der FAQ dieses Forums (link von oben)....


Soll das jetzt die Begründung sein, warum Du die Jar's auspacken musst/willst?

Abgesehen davon, macht das kein Mensch in der Praxis...(vermutlich verstößt das u.U. sogar gegen die Lizenzen....)

Was möchtest Du denn erreichen?

Du erzeugst ein JAR (x) in dem selbst wieder einige JAR's (a,b,c) liegen...Was möchtest Du mit dem JAR x machen? deployen? Oder was?

MfG
Karl Heinz Marbaise


----------



## vogella (13. Mrz 2007)

Hallo,

Ich möchte ein Jar haben, welche alles inkl. der Fremd Jars enthält. 

[EDIT] und dazu lauffähig ist...

Viele Grüße, Lars


----------



## kama (13. Mrz 2007)

Hallo,



			
				vogella hat gesagt.:
			
		

> Ich möchte ein Jar haben, welche alles inkl. der Fremd Jars enthält.


Also von der Command Line via java -cp x.jar gestartet werden kann?

MfG
Karl Heinz Marbaise


----------



## vogella (13. Mrz 2007)

Hallo,

ich möchte Kollegen das java.jar schicken und die sollten das per Double-click starten können. 

D.h. alles was für die Applikation notwendig ist, sollte in ein Jar. Zu dem Thema gibt es ja auch einen lange ausstehenden Bugbericht, der 106 Votes hat. bugs.sun.com/bugdatabase/view_bug.do?bug_id=4648386

Viele Grüße, 
Lars


----------



## kama (13. Mrz 2007)

Hi,

einfachste Lösung zu dem Thema ist, ein self-extracting ZIP/was auch immer, der dann ein BAT/CMD/sh enthält und Classpath entsprechend setzt und das Haupt-JAR mit Main-class aufruft.

Per Web gibt's die Möglichkeit einen Web-Start zu machen....

So weit ich weiß kann man auch noch den CLASSLOAD selbst beeinflussen und das Laden der Klassen selbst übernehmen, aber das würde ich mir nicht an tun....

Wie schon gesagt die untschiedlichen JAR's auspacken, kann man ja auch per "jar" auf der CMDLine innerhalb von Ant und dann alles in das Ziel-Jar einpacken...(ich würde hier aber unbedingt die Lizenzen kontrollieren,ob das auch erlaubt ist...).

EDIT: Oder man verwendet Installer (http://java-source.net/open-source/installer-generators)

MfG
Karl Heinz Marbaise


----------



## vogella (14. Mrz 2007)

Hallo,

was mich zu meiner ursprünglichen Frage zurückbringt:

Hat jemand ein Beispiel in ant wo jars in jars gepackt werden, so daß die Applikation selbstständig lauffähig ist?

Im ant manuel habe ich hierzu kein Beispiel gefunden und auch via Google nichts gefunden.

Viele Grüße, Lars


----------



## kama (14. Mrz 2007)

Hallo,



			
				vogella hat gesagt.:
			
		

> Hat jemand ein Beispiel in ant wo jars in jars gepackt werden, so daß die Applikation selbstständig lauffähig ist?


Wenn ich jetzt penibel bin, habe ich Dir ein vollständiges Beispiel dazu gegeben.

Was Du möchtest ist die JAR's vorher auspacken und dann mit in Dein jar einpacken.

Den Lösungsweg habe ich Dir dafür angegeben. Per jar in Ant auspacken und dann per Ant wieder einacken...

MfG
Karl Heinz Marbaise


----------



## vogella (14. Mrz 2007)

Hallo,

so habe es hinbekommen, ich entpacke die jars in mein deploy Verzeichnis. 

Damit der nächste dann ein Beispiel hat:

	<target name="unzip">
		<echo> Unzip task. From directory: ${build} to direcory ${lib} </echo>

		<unzip dest="${build}">
			<fileset dir="${lib}">
				<include name="*.jar" />
			</fileset>
		</unzip>
	</target>


Viele Grüße, Lars


----------



## vogella (14. Mrz 2007)

Hallo Karl Heinz,

leider hattest Du nicht verraten WIE es geht. Das ich entpacken muß und dann wieder einjaren muß, daß wußte ich es ja schon aus der FAQ wie ganz oben geschrieben.

Dennoch danke für den Versuch zu helfen. 

Viele Grüße, Lars


----------

