Включення jar в класний шлях в командному рядку (javac або apt)


137

намагаються запустити цю програму. Я думаю, що для налаштування всіх матеріалів веб-сервісу мені потрібно запустити влучну. (Хоча з використанням javac у мене виникає та сама проблема). Я думаю, що я отримую помилки компіляції. (Показано внизу).

Я думаю, що мені потрібно зробити це включити цю банку в шлях мого класу: jsr181-api.jar (джерело) . Чи є простий тимчасовий спосіб зробити це (на сонячному екрані)? Я не хочу додавати його до файлу 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

Оновлення: Прохолодний, який завершено, але він все ще не зовсім працює. Я створив нове запитання, щоб зберегти все добре і організовано:


Як бічна примітка, деякі банки потрібні лише під час компіляції (тобто javac), але не під час виконання (тобто java). Наприклад, lombokбаночка.
truthadjustr

Відповіді:


170

Спробуйте наступне:

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

Класовий шлях за замовчуванням (якщо не існує змінної середовища CLASSPATH) - це поточний каталог, тому якщо ви переглянете його, переконайтеся, що ви додаєте поточний каталог (.) До класного шляху, як я це зробив.


github.com/SpotterRF/json-examples/tree/master/java/jackson є хорошим прикладом в Makefile
coolaj86

@ CoolAJ86 Посилання, схоже, померло
Janis Peisenieks

30
Найкращий спосіб, який я знайшов - це використовувати java -cp *:. HelloWorld. Таким чином, всі банки в моєму класі завжди включаються.
NN

31

У вікнах:

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

переконайтеся, що клас з основною функцією знаходиться в одній із включених банок


20

Примітка для користувачів Windows, банки слід розділяти, ;а не :.

наприклад: javac -cp external_libs\lib1.jar;other\lib2.jar;


14

Використовуйте -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.  

(Зверніть увагу, що роздільник, який використовується для розділення записів на classpath, відрізняється між ОС, на моїй машині Windows це ;, в * nix, як правило :.)



2

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.