Incluyendo jarras en classpath en la línea de comandos (javac o apt)

137

tratando de ejecutar este programa Creo que para configurar todo el servicio web necesito ejecutar apt. (Aunque estoy usando javac, estoy teniendo el mismo problema). Creo que lo que obtengo es errores de compilación. (Se muestra en la parte inferior).

Creo que lo que tengo que hacer es incluir este jar en mi ruta de clase: jsr181-api.jar (fuente) . ¿Hay una forma temporal simple de hacer esto (en solaris)? No quiero agregarlo a mi archivo bash_rc (está ahí para siempre). También sé que hay alguna forma de hacerlo usando un archivo de texto manifiesto, pero eso parecía complicado, por lo que aún no lo he investigado. ¿Puedo hacer algo como:

javac HelloImp <listOfJars>

o

ant HelloImp <listOfJars>

Código:

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

Errores de compilación:

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

Actualización: genial que está envuelto pero todavía no funciona del todo. He creado una nueva pregunta para mantener las cosas agradables y organizadas:

Sixtyfootersdude
fuente
Como nota al margen, algunos frascos solo son necesarios durante la compilación (es decir javac), pero no en tiempo de ejecución (es decir java). Por ejemplo, el lombokfrasco.
truthadjustr

Respuestas:

170

Intenta lo siguiente:

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

El classpath predeterminado (a menos que haya una variable de entorno CLASSPATH) es el directorio actual, por lo que si lo redefine, asegúrese de agregar el directorio actual (.) Al classpath como lo he hecho.

Kevin
fuente
github.com/SpotterRF/json-examples/tree/master/java/jackson tiene un buen ejemplo en el Makefile
coolaj86
@ CoolAJ86 El enlace parece haberse apagado
Janis Peisenieks
30
La mejor manera que encontré es usar java -cp *:. HelloWorld. De esa manera, todos los frascos en mi classpath siempre están incluidos.
NN
31

En windows:

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

asegúrese de que la clase con la función principal esté en uno de los frascos incluidos

Ben
fuente
20

Nota para los usuarios de Windows, los frascos deben estar separados por ;y no :.

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

luisv
fuente
14

Use el interruptor -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.  

(Tenga en cuenta que el separador utilizado para separar las entradas en el classpath difiere entre los sistemas operativos, en mi máquina Windows lo es ;, en * nix generalmente es :).

mate b
fuente
3

Utilizando:

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

funciona pero me da otro error, ver nueva pregunta

Sixtyfootersdude
fuente
2

javac HelloWorld.java -classpath ./javax.jar, suponiendo que javax está en la carpeta actual, y el objetivo de compilación es "HelloWorld.java", y puede compilar sin un método principal

Stoica Mircea
fuente