Inclure les fichiers jars dans classpath en ligne de commande (javac ou apt)

137

essayer d'exécuter ce programme. Je pense que pour configurer tous les services Web, j'ai besoin d'exécuter apt. (Bien que j'utilise javac, j'ai le même problème). Je pense que ce que je reçois, ce sont des erreurs de compilation. (Montré en bas).

Je pense que ce que je dois faire est d'inclure ce fichier jar dans mon chemin de classe: jsr181-api.jar (source) . Existe-t-il un moyen temporaire simple de le faire (sur solaris)? Je ne veux pas l'ajouter à mon fichier bash_rc (il est là pour toujours). Je sais aussi qu'il existe un moyen de le faire en utilisant un fichier texte manifeste, mais cela semblait compliqué, je ne l'ai donc pas encore examiné. Puis-je simplement faire quelque chose comme:

javac HelloImp <listOfJars>

ou

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

Erreurs de compilation:

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

Mise à jour: Cool qui est terminé mais cela ne fonctionne toujours pas tout à fait. J'ai créé une nouvelle question pour garder les choses bien et organisées:

soixantefootersdude
la source
En remarque, certains fichiers JAR ne sont nécessaires que pendant la compilation (ie javac) mais pas à l'exécution (ie java). Par exemple, le lombokpot.
truthadjustr

Réponses:

170

Essayez ce qui suit:

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

Le chemin de classe par défaut (sauf s'il existe une variable d'environnement CLASSPATH) est le répertoire actuel, donc si vous le redéfinissez, assurez-vous d'ajouter le répertoire actuel (.) Au chemin de classe comme je l'ai fait.

Kevin
la source
github.com/SpotterRF/json-examples/tree/master/java/jackson a un bon exemple dans le Makefile
coolaj86
@ CoolAJ86 Le lien semble être mort
Janis Peisenieks
30
Le meilleur moyen que j'ai trouvé est d'utiliser java -cp *:. HelloWorld. De cette façon, tous les fichiers JAR de mon classpath sont toujours inclus.
NN
31

Dans Windows:

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

assurez-vous que la classe avec la fonction principale est dans l'un des fichiers JAR inclus

Ben
la source
20

Remarque pour les utilisateurs Windows, les fichiers JAR doivent être séparés par ;et non :.

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

Luisv
la source
14

Utilisez le commutateur -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.  

(Notez que le séparateur utilisé pour séparer les entrées sur le chemin de classe diffère entre les systèmes d'exploitation, sur ma machine Windows ;, c'est généralement le cas dans * nix :.)

mat b
la source
3

En utilisant:

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

fonctionne mais cela me donne une autre erreur, voir nouvelle question

soixantefootersdude
la source
2

javac HelloWorld.java -classpath ./javax.jar, en supposant que javax se trouve dans le dossier actuel et que la cible de compilation est "HelloWorld.java", et vous pouvez compiler sans méthode principale

Stoica Mircea
la source