การรวมไหใน classpath บน commandline (javac หรือ apt)


137

พยายามเรียกใช้โปรแกรมนี้ ฉันคิดว่าการตั้งค่าทุกอย่างในเว็บเซอร์วิสนั้นฉันจำเป็นต้องใช้ apt (แม้ว่าการใช้ 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ขวด
trueadjustr

คำตอบ:


170

ลองทำสิ่งต่อไปนี้:

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

classpath เริ่มต้น (ยกเว้นว่ามีตัวแปรสภาพแวดล้อม CLASSPATH) เป็นไดเรกทอรีปัจจุบันดังนั้นหากคุณกำหนดใหม่ให้ตรวจสอบให้แน่ใจว่าคุณกำลังเพิ่มไดเรกทอรีปัจจุบัน (.) ลงใน classpath อย่างที่ฉันทำ


github.com/SpotterRF/json-examples/tree/master/java/jacksonมีตัวอย่างที่ดีใน Makefile
coolaj86

@ CoolAJ86 ลิงก์ดูเหมือนว่าจะตายไปแล้ว
Janis Peisenieks

30
java -cp *:. HelloWorldวิธีที่ดีที่สุดที่ผมพบคือการใช้งาน วิธีนี้รวมขวดทั้งหมดใน classpath ของฉันไว้เสมอ
NN

31

ใน windows:

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 ของฉันมันคือ;โดยปกติแล้วใน * ระวังจะเป็น:)



2

javac HelloWorld.java -classpath ./javax.jar สมมติว่า javax อยู่ในโฟลเดอร์ปัจจุบันและเป้าหมายการคอมไพล์คือ "HelloWorld.java" และคุณสามารถรวบรวมได้โดยไม่ใช้วิธีหลัก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.