Włączanie słoików do ścieżki klas w wierszu poleceń (javac lub apt)

137

próbuję uruchomić ten program. Myślę, że aby skonfigurować wszystkie usługi sieciowe, muszę uruchomić apt. (Chociaż używam javaca, mam ten sam problem). Myślę, że otrzymuję błędy kompilacji. (Pokazano na dole).

Myślę, że muszę dołączyć ten jar do mojej ścieżki klas: jsr181-api.jar (źródło) . Czy istnieje prosty tymczasowy sposób, aby to zrobić (w systemie solaris)? Nie chcę go dodawać do mojego pliku bash_rc (jest tam na zawsze). Wiem też, że jest sposób, aby to zrobić za pomocą pliku tekstowego manifestu, ale wydawało się to skomplikowane, więc jeszcze do tego nie zaglądałem. Czy mogę po prostu zrobić coś takiego:

javac HelloImp <listOfJars>

lub

ant HelloImp <listOfJars>

Kod:

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

Błędy kompilacji:

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

Aktualizacja: Fajne, które jest zapakowane, ale nadal nie działa. Utworzyłem nowe pytanie, aby utrzymać porządek i porządek:

sixtyfootersdude
źródło
Na marginesie, niektóre pliki jar są potrzebne tylko podczas kompilacji (tj. javac), Ale nie w czasie wykonywania (tj java.). Na przykład lomboksłoik.
trueadjustr

Odpowiedzi:

170

Spróbuj wykonać następujące czynności:

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

Domyślna ścieżka klasy (chyba że istnieje zmienna środowiskowa CLASSPATH) to katalog bieżący, więc jeśli go przedefiniujesz, upewnij się, że dodajesz bieżący katalog (.) Do ścieżki klas, tak jak to zrobiłem.

Kevin
źródło
github.com/SpotterRF/json-examples/tree/master/java/jackson ma dobry przykład w pliku Makefile
coolaj86
@ CoolAJ86 Wydaje się, że link zniknął
Janis Peisenieks
30
Najlepszym sposobem, jaki znalazłem, jest użycie java -cp *:. HelloWorld. W ten sposób wszystkie słoiki w mojej ścieżce klas są zawsze uwzględniane.
NN
31

W oknach:

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

upewnij się, że klasa z główną funkcją znajduje się w jednym z dołączonych słoików

Ben
źródło
20

Uwaga dla użytkowników systemu Windows, słoiki powinny być oddzielone znakiem ;i nie :.

na przykład: javac -cp external_libs\lib1.jar;other\lib2.jar;

luisv
źródło
14

Użyj przełącznika -cplub -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.  

(Zauważ, że separator używany do oddzielania wpisów w ścieżce klas różni się w zależności od systemu operacyjnego, na moim komputerze z systemem Windows jest ;to zwykle w * nix :).

matowe b
źródło
3

Za pomocą:

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

działa, ale daje mi kolejny błąd, zobacz nowe pytanie

sixtyfootersdude
źródło
2

javac HelloWorld.java -classpath ./javax.jar, zakładając, że javax znajduje się w bieżącym folderze, a miejscem docelowym kompilacji jest „HelloWorld.java” i można skompilować bez głównej metody

Stoica Mircea
źródło