Incluindo jars no caminho de classe na linha de comando (javac ou apt)

137

tentando executar este programa. Eu acho que para configurar todas as coisas de serviço da web, preciso executar o apt. (Embora usando javac, estou tendo o mesmo problema). Acho que estou recebendo erros de compilação. (Mostrado na parte inferior).

Acho que o que preciso fazer é incluir este jar no meu caminho de classe: jsr181-api.jar (fonte) . Existe uma maneira temporária simples de fazer isso (no solaris)? Não quero adicioná-lo ao meu arquivo bash_rc (existe para sempre). Sei também que existe uma maneira de fazê-lo usando um arquivo de texto manifesto, mas isso parecia complicado, por isso ainda não o examinei. Posso apenas fazer algo como:

javac HelloImp <listOfJars>

ou

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

Erros de compilação:

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

Atualização: Cool que está embrulhado, mas ainda não está funcionando. Criei uma nova pergunta para manter as coisas legais e organizadas:

sixtyfootersdude
fonte
Como observação lateral, alguns jars são necessários apenas durante a compilação (ie javac), mas não no tempo de execução (ie java). Por exemplo, o lombokfrasco.
truthadjustr

Respostas:

170

Tente o seguinte:

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

O caminho de classe padrão (a menos que exista uma variável de ambiente CLASSPATH) é o diretório atual; portanto, se você o redefinir, certifique-se de adicionar o diretório atual (.) Ao caminho de classe, como eu fiz.

Kevin
fonte
github.com/SpotterRF/json-examples/tree/master/java/jackson tem um bom exemplo no Makefile
coolaj86
@ CoolAJ86 O link parece ter morrido #
Janis Peisenieks
30
A melhor maneira que eu encontrei é usar java -cp *:. HelloWorld. Dessa forma, todos os jarros no meu caminho de classe são sempre incluídos.
NN
31

No windows:

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

verifique se a classe com a função principal está em um dos frascos incluídos

Ben
fonte
20

Nota para usuários do Windows, os frascos devem ser separados por ;e não :.

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

luisv
fonte
14

Use o botão -cpou -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.  

(Observe que o separador usado para separar as entradas no caminho de classe difere entre os sistemas operacionais, na minha máquina Windows ;, em * nix geralmente :.)

matt b
fonte
3

Usando:

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

funciona mas dá outro erro, veja nova pergunta

sixtyfootersdude
fonte
2

javac HelloWorld.java -classpath ./javax.jar, supondo que o javax esteja na pasta atual e o destino da compilação seja "HelloWorld.java", e você pode compilar sem o método principal

Stoica Mircea
fonte