Ich versuche, die öffentlichen Methoden/classed aus einem Projekt als JAR-Datei (genannt Hello.jar für Beispiel) in einem Paket namens Hallo verpackt zu verwenden.Verwenden eines Jar in einem Java-Projekt?
package hello;
public class Hello
{
public static void main(String[] args)
{
coucou();
}
public static void coucou()
{
System.out.println("Hello there");
}
}
In einem separaten Projekt namens Werkzeug, ich will Hello.coucou()
die Methode in der Lage sein zu nennen so etwas wie dies schrieb ich:
import hello.*;
public class Tool
{
public static void main(String[] args)
{
System.out.println("main program running");
Hello.coucou();
}
}
und ich Tool.java mit folgendem Befehl kompiliert (unter linux):
$ javac Tool.java -classpath .:./extern/:
wo Hello.jar in dem Ordner befindet, ./extern
Dies scheint gut zu kompilieren, aber wenn ich es starte (d. H. Java-Tool), bekomme ich diese:
main program running
Exception in thread "main" java.lang.NoClassDefFoundError: hello/Hello
at Tool.main(Tool.java:9)
Caused by: java.lang.ClassNotFoundException: hello.Hello
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
Ich bin neu in Java (C/C++ Hintergrund), und ich verstehe nicht, was ich falsch mache. Irgendwelche Ideen?
Prost David
Edit: I Hello.jar zu dem Classpath auf der Kommandozeile versucht, indem, aber ich immer noch die gleichen Fehler:
$ javac Tool.java -classpath .:./extern/Hello.jar:
$ java Tool -classpath .:./extern/Hello.jar:
main program running
Exception in thread "main" java.lang.NoClassDefFoundError: hello/Hello
at Tool.main(Tool.java:9)
Caused by: java.lang.ClassNotFoundException: hello.Hello
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
Ich würde eher Semikolons als Doppelpunkte erwarten, die die Klassenpfade trennen. – Tom
Windows: Semi-Colons Linux: Doppelpunkte – dm76