Включение jar-файлов в путь к классам в командной строке (javac или apt)

137

пытаюсь запустить эту программу. Я думаю, что для настройки всего веб-сервиса мне нужно запустить apt. (Хотя я использую javac, у меня такая же проблема). Я думаю, что я получаю ошибки компиляции. (Показано внизу).

Я думаю, что мне нужно включить эту банку в свой путь к классу: jsr181-api.jar (источник) . Есть ли простой временный способ сделать это (на solaris)? Я не хочу добавлять его в свой файл bash_rc (он там навсегда). Я также знаю, что есть способ сделать это с помощью текстового файла манифеста, но это показалось мне сложным, поэтому я еще не изучал его. Могу я сделать что-нибудь вроде:

javac HelloImp <listOfJars>

или

ant HelloImp <listOfJars>

Код:

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

Ошибки компиляции:

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

Обновление: круто, но он все еще не работает. Я создал новый вопрос, чтобы все было красиво и организовано:

шестьдесят футов
источник
Кстати, некоторые jar-файлы необходимы только во время компиляции (т.е. javac), но не во время выполнения (т.е. java). Например, lombokфляга.
eigenfield

Ответы:

170

Попробуйте следующее:

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

Путь к классам по умолчанию (если нет переменной среды CLASSPATH) - это текущий каталог, поэтому, если вы переопределите его, убедитесь, что вы добавляете текущий каталог (.) В путь к классам, как это сделал я.

Кевин
источник
github.com/SpotterRF/json-examples/tree/master/java/jackson имеет хороший пример в Makefile
coolaj86
@ CoolAJ86 Ссылка, кажется, пропала
Янис Пейсениекс
30
Лучший способ, который я нашел, - это использовать java -cp *:. HelloWorld. Таким образом, все банки в моем пути к классам всегда включены.
NN
32

В окнах:

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

убедитесь, что класс с основной функцией находится в одной из включенных jar-файлов

Бен
источник
22

Примечание для пользователей Windows: jar-файлы следует разделять знаком, ;а не :.

например: javac -cp external_libs\lib1.jar;other\lib2.jar;

luisv
источник
15

Используйте переключатель -cpили -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.  

(Обратите внимание, что разделитель, используемый для разделения записей в пути к классам, отличается в разных ОС, на моем компьютере с Windows он есть ;, в * nix обычно :.)

Мэтт Би
источник
3

С помощью:

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

работает, но дает мне еще одну ошибку, см. новый вопрос

шестьдесят футов
источник
2

javac HelloWorld.java -classpath ./javax.jar, предполагая, что javax находится в текущей папке, а целью компиляции является «HelloWorld.java», и вы можете скомпилировать без основного метода

Стойка Мирча
источник