Einfügen von Gläsern in den Klassenpfad in der Befehlszeile (javac oder apt)

137

versuchen, dieses Programm auszuführen. Ich denke, dass ich apt einrichten muss, um alle Web-Service-Dinge einzurichten. (Obwohl ich Javac benutze, habe ich das gleiche Problem). Ich denke, was ich bekomme, sind Kompilierungsfehler. (Unten gezeigt).

Ich denke, ich muss dieses Glas in meinen Klassenpfad aufnehmen: jsr181-api.jar (Quelle) . Gibt es eine einfache vorübergehende Möglichkeit, dies zu tun (auf Solaris)? Ich möchte es nicht zu meiner bash_rc-Datei hinzufügen (es ist für immer da). Ich weiß auch, dass es eine Möglichkeit gibt, dies mit einer Manifest-Textdatei zu tun, aber das schien kompliziert zu sein, so dass ich mich noch nicht damit befasst habe. Kann ich einfach so etwas machen wie:

javac HelloImp <listOfJars>

oder

ant HelloImp <listOfJars>

Code:

package server;

import javax.jws.WebService;

@WebService
public class HelloImpl {

  /**
   * @param name
   * @return Say hello to the person.
   */
   public String sayHello(String name) {
     return "Hello, " + name + "!";
   }
}

Kompilierungsfehler:

HelloImpl.java:3: package javax.jws does not exist
import javax.jws.WebService;
                 ^
HelloImpl.java:5: cannot find symbol
symbol: class WebService
@WebService
 ^
2 errors

Update: Cool, das ist eingepackt, aber es funktioniert immer noch nicht ganz. Ich habe eine neue Frage erstellt , um die Dinge schön und organisiert zu halten:

sechzig Fuß
quelle
Nebenbei bemerkt, einige Gläser werden nur während der Kompilierung (dh javac) benötigt, nicht jedoch zur Laufzeit (dh java). Zum Beispiel das lombokGlas.
Truthadjustr

Antworten:

170

Versuche Folgendes:

java -cp jar1:jar2:jar3:dir1:. HelloWorld

Der Standardklassenpfad (es sei denn, es gibt eine CLASSPATH-Umgebungsvariable) ist das aktuelle Verzeichnis. Wenn Sie ihn also neu definieren, stellen Sie sicher, dass Sie das aktuelle Verzeichnis (.) Wie bisher zum Klassenpfad hinzufügen.

Kevin
quelle
github.com/SpotterRF/json-examples/tree/master/java/jackson hat ein gutes Beispiel im Makefile
coolaj86
@ CoolAJ86 Der Link scheint tot zu sein
Janis Peisenieks
30
Der beste Weg, den ich gefunden habe, ist zu verwenden java -cp *:. HelloWorld. Auf diese Weise sind immer alle Gläser in meinem Klassenpfad enthalten.
NN
31

In Fenstern:

java -cp C:/.../jardir1/*;C:/.../jardir2/* class_with_main_method

Stellen Sie sicher, dass sich die Klasse mit der Hauptfunktion in einem der enthaltenen Jars befindet

Ben
quelle
20

Hinweis: Für Windows-Benutzer sollten die Gläser durch ;und nicht getrennt werden :.

beispielsweise: javac -cp external_libs\lib1.jar;other\lib2.jar;

luisv
quelle
14

Verwenden Sie den Schalter -cpoder -classpath.

$ java -help  
Usage: java [-options] class [args...]  
           (to execute a class)  
   or  java [-options] -jar jarfile [args...]  
           (to execute a jar file)  

where options include:  
...  
    -cp <class search path of directories and zip/jar files>  
    -classpath <class search path of directories and zip/jar files>  
                  A ; separated list of directories, JAR archives,  
                  and ZIP archives to search for class files.  

(Beachten Sie, dass das Trennzeichen zum Trennen von Einträgen im Klassenpfad von Betriebssystem zu Betriebssystem unterschiedlich ist. Auf meinem Windows-Computer ist dies ;in * nix normalerweise der Fall :.)

matt b
quelle
3

Verwenden von:

apt HelloImpl.java -classpath /sac/tools/thirdparty/jaxws-ri/jaxws-ri-2.1.4/lib/jsr181-api.jar:.

funktioniert, aber es gibt mir einen weiteren Fehler, siehe neue Frage

sechzig Fuß
quelle
2

javac HelloWorld.java -classpath ./javax.jar, vorausgesetzt, javax befindet sich im aktuellen Ordner und das Kompilierungsziel ist "HelloWorld.java", und Sie können ohne Hauptmethode kompilieren

Stoica Mircea
quelle