Menyertakan toples di classpath pada commandline (javac atau apt)

137

mencoba menjalankan program ini. Saya pikir untuk menyiapkan semua layanan web, saya perlu menjalankan apt. (Meskipun menggunakan javac, saya mengalami masalah yang sama). Saya pikir apa yang saya dapatkan adalah kesalahan kompilasi. (Tampil di bawah).

Saya pikir yang perlu saya lakukan adalah memasukkan jar ini ke jalur kelas saya: jsr181-api.jar (sumber) . Apakah ada cara sementara yang sederhana untuk melakukan ini (di solaris)? Saya tidak ingin menambahkannya ke file bash_rc saya (itu ada selamanya). Saya juga tahu bahwa ada beberapa cara untuk melakukannya menggunakan file teks manifes tetapi itu tampak rumit jadi saya belum memeriksanya. Bisakah saya melakukan sesuatu seperti:

javac HelloImp <listOfJars>

atau

ant HelloImp <listOfJars>

Kode:

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

Kesalahan kompilasi:

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

Pembaruan: Keren yang dibungkus tetapi masih belum berfungsi. Saya telah membuat pertanyaan baru untuk menjaga semuanya tetap bagus dan teratur:

sixtyfootersdude
sumber
Sebagai catatan tambahan, beberapa jars hanya diperlukan selama kompilasi (yaitu javac) tetapi tidak pada saat runtime (yaitu java). Misalnya lomboktoples.
eigenfield

Jawaban:

170

Coba yang berikut ini:

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

Classpath default (kecuali ada variabel lingkungan CLASSPATH) adalah direktori saat ini jadi jika Anda mendefinisikannya kembali, pastikan Anda menambahkan direktori saat ini (.) Ke classpath seperti yang telah saya lakukan.

Kevin
sumber
github.com/SpotterRF/json-examples/tree/master/java/jackson memiliki contoh yang baik di Makefile
coolaj86
@ CoolAJ86 Tautan tampaknya telah mati
Janis Peisenieks
30
Cara terbaik yang saya temukan adalah dengan menggunakan java -cp *:. HelloWorld. Dengan cara itu semua toples di classpath saya selalu disertakan.
NN
32

Di windows:

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

pastikan bahwa kelas dengan fungsi utama berada di salah satu toples yang disertakan

Ben
sumber
22

Catatan untuk pengguna Windows, toples harus dipisahkan oleh ;dan bukan :.

sebagai contoh: javac -cp external_libs\lib1.jar;other\lib2.jar;

luisv
sumber
15

Gunakan tombol -cpatau -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.  

(Perhatikan bahwa pemisah yang digunakan untuk memisahkan entri pada jalur kelas berbeda antara OS, pada mesin Windows saya ;, biasanya di * nix :.)

matt b
sumber
3

Menggunakan:

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

berfungsi tetapi memberi saya kesalahan lain, lihat pertanyaan baru

sixtyfootersdude
sumber
2

javac HelloWorld.java -classpath ./javax.jar, dengan asumsi javax ada di folder saat ini, dan target kompilasi adalah "HelloWorld.java", dan Anda dapat mengompilasi tanpa metode utama

Stoica Mircea
sumber