# ant und classpath



## karahead (11. Okt 2005)

Hi, hab mal frage zu ant.

Ich frage mich schon lange wie ich meinen Classpath elegant dynamisch erstellen kann?  8) 
hab's bis jetzt so gemacht:

```
...
<property name="classpath" location="${lib}/xyz.jar" />
...
```

Tja leider bleibt's nicht immer bei einer jar und ich hab keinen Bock immer die langen jarNamen und ihre ewig langen versions nummer zu schreiben.

Naja hab mir gedacht, dass es so in der Art doch gehen müsste. Tut's aber nicht:

```
...
<property name="classpath" location="${lib}/*.jar" />
...
```

Naja hoffe jemand war schon vormir so faul und hat sich da ne Lösung überlegt.


----------



## Bleiglanz (11. Okt 2005)

**/*.jar

aber nicht in der Property, sondern beim fileset...


----------



## karahead (11. Okt 2005)

Erstmal danke für die schnelle Antwort.

Das bringt mich zu 2 neuen Fragen: 
1. *.jar beudetet, dass jede File mit der Endung .jar hinzugefügt wird. Aber was bedeutet **/ ???
2. Hast du ein kleines Bsp. parat zu fileset und cp. Weiß jetzt nicht ob es in javac kommt oder irgend woanders hin.


----------



## Bleiglanz (12. Okt 2005)

** bedeuted beliebiege unter-unter-(...) directories

erst einen path anlegen

```
<path id="MeinClasspath">
    <fileset dir="${lib.dir}">
      <include name="**/*.jar"/>
    </fileset>
  </path>
```

und dann verwenden

```
<target name="compile">
    <javac ...>
      <classpath refid="MeinClasspath"/>
    </javac>
  </target>
```


----------



## karahead (12. Okt 2005)

Danke, jetzt kann ich mir das ganze tippen sparen


----------



## karahead (12. Okt 2005)

Nur noch ne kleine Frage.
Hab's nun so gemacht wie es in deinem Bsp steht, denn meine Ideen haben net geklappt 
Aber wie krieg ich den classpath nun in meine Jar-Manifest.

Hab's mal so probiert:

```
...
<path id="classpath"> 
		<fileset dir="${lib}"> 
			<include name="**/*.jar"/> 
		</fileset>
		<fileset dir="${plugins.bin}">
			<include name="**/*.class"/>
		</fileset>
		<fileset dir="${plugins.bin}">
			<include name="**/*.jar" />
		</fileset>
	</path> 
...
<jar destfile="${jar.name}"
			 basedir="${build}"	>
			<manifest>
				<attribute name="Class-Path" value="${classpath}"/> //problem
				<attribute name="Main-Class" value="pfad.zur.MainClass" />
			</manifest>
		</jar>
```
Leider schreibt ant ${classpath} wörtlich rein, soll es aber nicht.

-Danke


----------



## Bleiglanz (12. Okt 2005)

schätze mal da musst du das von Hand schreiben, schau ggf. mal in die Doku


----------



## karahead (12. Okt 2005)

Ok so weit ich das verstanden habe, geht's einfach nicht, weil man mit <path id... keine ${}-Variabel erstellt.

Also heißt es für mich weiter per Hand schreiben.


----------



## Jörg (13. Okt 2005)

habs nur ueberflogen, aber ich glaub du brauchst sowas:

```
<!-- convert the path property to default property, to use it 
	     as Class-Path attribute in jar-manifest file. -->
	<pathconvert refid="classpath" property="manifest.class.path"
						    	   dirsep="/" pathsep=" ">
		
		<chainedmapper>
			<flattenmapper /> 
			<globmapper from="*" to="${lib.dir}/*"/>
		</chainedmapper>
	</pathconvert>

				<manifest id="ka">
					<attribute name="Class-Path" value="${manifest.class.path}" />
				</manifest>
```

hm hab ich aus nem Forum, weiss aber nicht mehr aus welchem...


----------



## karahead (13. Okt 2005)

Danke pathconvert ist genau das was ich gesucht habe. Jetzt funktionierts.
---Edit
kann mal ein OP das häckchen setzten. Irgendwie klappt es bei mir nicht.


----------

