Compresi i vasetti in classpath su commandline (javac o apt)


137

cercando di eseguire questo programma. Penso che per configurare tutte le cose del servizio Web sia necessario eseguire apt. (Anche se usando javac sto riscontrando lo stesso problema). Penso che ciò che ottengo siano errori di compilazione. (Mostrato in basso).

Penso che ciò che devo fare sia includere questo vaso nel mio percorso di classe: jsr181-api.jar (fonte) . Esiste un modo temporaneo semplice per farlo (su Solaris)? Non voglio aggiungerlo al mio file bash_rc (è lì per sempre). So anche che esiste un modo per farlo usando un file di testo manifest, ma mi è sembrato complicato, quindi non l'ho ancora esaminato. Posso fare qualcosa del tipo:

javac HelloImp <listOfJars>

o

ant HelloImp <listOfJars>

Codice:

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 + "!";
   }
}

Errori di compilazione:

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

Aggiornamento: cool che è concluso ma non funziona ancora del tutto. Ho creato una nuova domanda per mantenere le cose belle e organizzate:


Come nota a margine, alcuni vasi sono necessari solo durante la compilazione (ad es. javac) Ma non in fase di esecuzione (ad es java.). Ad esempio, il lombokbarattolo.
truthadjustr,

Risposte:


170

Prova quanto segue:

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

Il percorso di classe predefinito (a meno che non sia presente una variabile di ambiente CLASSPATH) è la directory corrente, quindi se la ridefinisci, assicurati di aggiungere la directory corrente (.) Al percorso di classe come ho fatto.



@ CoolAJ86 Il collegamento sembra essere morto
Janis Peisenieks il

30
Il modo migliore che ho trovato è usare java -cp *:. HelloWorld. In questo modo tutti i barattoli nel mio percorso di classe sono sempre inclusi.
NN,

31

In windows:

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

assicurarsi che la classe con la funzione principale sia in uno dei barattoli inclusi


20

Nota per gli utenti Windows, i barattoli devono essere separati ;e non :.

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


14

Utilizzare l' opzione -cpo -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.  

(Si noti che il separatore utilizzato per separare le voci nel percorso di classe differisce tra i sistemi operativi, sul mio computer Windows lo è ;, in * nix è di solito :.)


3

usando:

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

funziona ma mi dà un altro errore, vedi nuova domanda


2

javac HelloWorld.java -classpath ./javax.jar, supponendo che javax sia nella cartella corrente e che la destinazione di compilazione sia "HelloWorld.java" e che sia possibile compilare senza un metodo principale

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.