# [ANT] jsch jar aus einem anderen Ordner laden



## Salitor (25. Nov 2008)

Hallo Zusammen,

meine Situation: Ich habe ein Tool mit ANT gebaut, welches aus dem Ordner "myProject\src" Java Files in Class-Dateien umwandelt und später als jar-Datei komprimiert und optional mittels <scp ...> auf einen Server lädt. Für scp habe ich jsch-0.1.40.jar heruntergeladen. Wenn ich es im Ordner "%ANT_HOME%\lib" ablege läuft alles einwandfrei. Habe mir auch eine kleine Batch-Datei geschrieben.

Jetzt meine Frage/Problem: Das Tool soll dynamisch von verschiedenen PCs aufrufbar sein und ich möchte nach Möglichkeit die jsch-0.1.40.jar Datei im Ordner "myProject\lib"  statt "%ANT_HOME%\lib" ablegen. Das funktioniert bei Eclipse, wenn ich die classpath abändere, aber mit der Batch-Datei oder einfaches Ausführen mit cmd geht nicht. 


```
<target name="upload" depends="login_password" description="Upload">
 <scp todir="${user}:${password}@${host}:/${serverPath}"  trust="yes">
  <fileset dir="${dist.dir}">
   <include name="${file.name}_vers_${version}.jar"/>
  </fileset>
 </scp>
</target>
```

Ich habe auch schon versucht in der Batch-Datei, die Path-Variable auf den Ordner ..\myProject\lib zu setzen. Jedoch wurde das JAR-File nicht gefunden:



> Do not panic, this is a common problem.
> The commonest cause is a missing JAR.
> 
> This is not a bug; it is a configuration problem



Hat jemand eine Lösung für mich? Wenn ja, wäre ein kleine Beispiel super. Vielen Dank im Voraus.


----------



## Wildcard (25. Nov 2008)

mach vorher ein taskdef


----------



## Guest (25. Nov 2008)

```
<path id="jsch.path">
 <pathelement location="./lib/ant-jsch.jar"/>
 <pathelement location="./lib/jsch-0.1.40.jar"/>
</path>

<taskdef name="scp"
classname="org.apache.tools.ant.taskdefs.optional.ssh.Scp"
classpathref="jsch.path"/>

<target name="upload" depends="login_password" description="Upload jar-Files with SSH">
 <scp todir="${user}:${password}@${host}:/${serverPath}"  trust="yes">
  <fileset dir="${dist.dir}">
   <include name="${file.name}_vers_${version.jar"/>
  </fileset>
 </scp>
</target>
```

Dabei bekomme ich dann bei taskdef folgende Fehlermeldung:



> taskdef A class needed by class org.apache.tools.ant.taskdefs.optional.ssh.Scp cannot be found:
> com/jcraft/jsch/UserInfo



Ich habe überhaupt keine Ahnung wie ich das machen muss. Kann mir jemand sagen, was ich falsch gemacht habe?


----------



## Wildcard (25. Nov 2008)

Liegt wohl an deinem Classpath. Lass dir mal ausgeben was in jsch.path steht.


----------



## Salitor (25. Nov 2008)

wie lese ich diese denn aus? Das mit Classpath und Path verstehe ich einfach irgendwie nciht. Wenn ich bei Eclipse über die Fehlermeldung gehe, zeigt er mir halt 

```
taskdef A class needed by class org.apache.tools.ant.taskdefs.optional.ssh.Scp cannot be found: 
 com/jcraft/jsch/UserInfo
```

Wenn ich oben bei der Deklaration von jsch.path gehe, zeigt er mir


> Path Elements:
> -H:\java\myProject\lib\ant-jsch.jar
> -H:\java\myProject\lib\jsch-0.1.40.jar


am. Aber wahrscheinlich meintest du das nicht oder? Weiss aber auch nicht, wie ich das anders machen kann.


----------



## Salitor (26. Nov 2008)

Aber das ich nur die PATH Variable bei den Umgebungsvariablen für ANT geändert und keine Classpath angelegt habe, ist doch nicht das Problem oder? Komme da einfach nicht weiter.


----------



## siebtel (27. Nov 2008)

ich bin auf den selben fehler gestoßen wie du und bin beim googlen auf deinem froumseintrag gestoßen.
ich habe das problem endlich gefunden.
und zwar musst du für den scp task unter http://www.jcraft.com/jsch/index.html die jsch.jar dowloaden und ins lib verzeichnis von ant kopieren. dann funzt es.
grüße sebastian

hier der download link http://prdownloads.sourceforge.net/jsch/jsch-0.1.40.jar?download


----------



## Salitor (1. Dez 2008)

Danke Siebtel, so funktioniert das natürlich. Hatte es auch so schon hinbekommen. 
Jedoch möchte ich es dynamisch haben, also jsch-0.1.40.jar nicht unter %ANT_HOME%\lib ablegen. Stattdessen soll es im Unterordner von der xml-Datei liegen. Wenn das Programm dann auf einen anderen PC kopiert wird, soll es auch einfach ausführbar sein. Dies soll mit "taskdef" möglich sein, aber leider funktioniert es mit dem oberen Code nicht.


----------

