# Commons Net 2.0 und FTP in meinem Programm



## Sneek (13. Jul 2009)

Hi Leute ich versuch mich gerade an einem FTP Programm in Java.

Nur um erstmal einzusteigen sitz ich an einem kleinem Testprogramm was wie folgt ausschaut:

```
import java.io.*;
import org.apache.commons.net.ftp.FTPClient;

public class CFTP{
	public static void main(String[] args){
		FTPClient f = new FTPClient();
		try{
			f.connect("adresse zum ftp server"); //Original natürlich ersetzt
			f.login("benutzername", "passwort");
			f.makeDirectory("Testordner");
		}
		catch(IOException io){
			
		}

	}
}
```

Es soll also testweise ein Ordner erstellt werden.

Wenn ich den Code nun compilieren will und den Classpath mit angeben kann er es ohne rumzumurren compilieren.

```
philipp@ubuntu:~/workspace/FTP_test$ javac -classpath "/home/philipp/Java/commons-net-2.0/commons-net-ftp-2.0.jar" CFTP.java
```

Wenn ich nun versuche das Programm mittels

```
java CFTP
```
 auszuführen kommt allerdings folgende Fehlermeldung:

```
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/net/ftp/FTPClient
	at CFTP.main(CFTP.java:7)
        Caused by: java.lang.ClassNotFoundException: org.apache.commons.net.ftp.FTPClient
	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
	... 1 more
```

So richtig weiss ich nicht wie ich den Fehler beheben kann :/


----------



## Geeeee (13. Jul 2009)

So?

```
philipp@ubuntu:~/workspace/FTP_test$ java -classpath "/home/philipp/Java/commons-net-2.0/commons-net-ftp-2.0.jar" CFTP
```
Du brauchst die Lib im Classpath natürlich auch beim Ausführen.


----------



## Sneek (13. Jul 2009)

Geeeee hat gesagt.:


> So?
> 
> ```
> philipp@ubuntu:~/workspace/FTP_test$ java -classpath "/home/philipp/Java/commons-net-2.0/commons-net-ftp-2.0.jar" CFTP
> ...



Hm, das heißt also das Programm läuft nur dann wenn ich beim Startbefehl auch den Classpath angebe?

Gibt es auch Möglichkeiten das auf einem Rechner auszuführen, auf dem die Libs nicht vorhanden sind?
Also praktisch ich gebe jemandem mein fertiges Programm und bei ihm soll es nach einem Doppelklick auf das fertige Programm laufen.

Edit: Wenn ich den Classpath setze kommt fast die selbe Fehlermeldung 


```
philipp@ubuntu:~/workspace/FTP_test$ java -classpath "/home/philipp/Java/commons-net-2.0/commons-net-ftp-2.0.jar" CFTP
Exception in thread "main" java.lang.NoClassDefFoundError: CFTP
Caused by: java.lang.ClassNotFoundException: CFTP
	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
Could not find the main class: CFTP. Program will exit
```


----------



## musiKk (13. Jul 2009)

```
... -classpath "die/lib.jar:." ...
```
(das :. hinter dem Jar ist das Wichtige hier)
Die -classpath-Option überschreibt alles andere. Die Klasse CFTP liegt im aktuellen Verzeichnis und das ist nicht mehr im Classpath (sondern nur noch das Jar allein).

Und natürlich muss die Bibliothek immer in irgendeiner Form vorhanden sein.


----------



## Sneek (14. Jul 2009)

musiKk hat gesagt.:


> ```
> ... -classpath "die/lib.jar:." ...
> ```
> (das :. hinter dem Jar ist das Wichtige hier)
> ...



Ahh, besten Dank, da lag der und begraben


----------

