ant: Jar in Jar

Status
Nicht offen für weitere Antworten.

vogella

Bekanntes Mitglied
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

Top Contributor
Hallo,

schon mal das Manual zu Ant durchgelesen?

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

Bekanntes Mitglied
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

Bekanntes Mitglied
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


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

Top Contributor
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

Bekanntes Mitglied
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

Top Contributor
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

Bekanntes Mitglied
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

Top Contributor
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

Bekanntes Mitglied
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

Top Contributor
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

Bekanntes Mitglied
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

Bekanntes Mitglied
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
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben