Bao gồm các tệp trong classpath trên dòng lệnh (javac hoặc apt)


137

cố gắng chạy chương trình này Tôi nghĩ rằng để thiết lập tất cả các công cụ dịch vụ web tôi cần chạy apt. (Mặc dù sử dụng javac tôi cũng gặp vấn đề tương tự). Tôi nghĩ rằng những gì tôi đang nhận được là biên dịch lỗi. (Thể hiện ở phía dưới).

Tôi nghĩ rằng những gì tôi cần làm là bao gồm jar này trong đường dẫn lớp của tôi: jsr181-api.jar (nguồn) . Có một cách tạm thời đơn giản để làm điều này (trên solaris)? Tôi không muốn thêm nó vào tập tin bash_rc của mình (nó tồn tại mãi mãi). Tôi cũng biết rằng có một số cách để làm điều đó bằng cách sử dụng tệp văn bản kê khai nhưng điều đó có vẻ phức tạp nên tôi chưa xem xét nó. Tôi có thể làm một cái gì đó như:

javac HelloImp <listOfJars>

hoặc là

ant HelloImp <listOfJars>

Mã số:

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

Biên dịch lỗi:

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

Cập nhật: Mát mẻ được gói nhưng nó vẫn không hoạt động. Tôi đã tạo một câu hỏi mới để giữ mọi thứ tốt đẹp và có tổ chức:


Là một mặt lưu ý, một số lọ chỉ cần quá trình biên dịch (ví dụ javac) nhưng không phải ở thời gian chạy (ví dụ java). Ví dụ, lombokbình.
Truthadjustr

Câu trả lời:


170

Hãy thử như sau:

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

Đường dẫn mặc định (trừ khi có biến môi trường CLASSPATH) là thư mục hiện tại, vì vậy nếu bạn xác định lại nó, hãy đảm bảo bạn đang thêm thư mục hiện tại (.) Vào đường dẫn lớp như tôi đã làm.


github.com/SpotterRF/json-examples/tree/master/java/jackson có một ví dụ điển hình trong Makefile
coolaj86

@ CoolAJ86 Liên kết dường như đã chết
Janis Peisenieks

30
Cách tốt nhất tôi tìm thấy là sử dụng java -cp *:. HelloWorld. Bằng cách đó, tất cả các lọ trong đường dẫn của tôi luôn được bao gồm.
NN

31

Trong cửa sổ:

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

đảm bảo rằng lớp có chức năng chính nằm trong một trong các lọ được bao gồm


20

Lưu ý đối với người dùng Windows, các lọ nên được phân tách bằng ;và không :.

ví dụ: javac -cp external_libs\lib1.jar;other\lib2.jar;


14

Sử dụng -cphoặc -classpathchuyển đổi.

$ 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.  

(Lưu ý rằng dấu phân cách được sử dụng để phân tách các mục trên đường dẫn lớp khác nhau giữa các hệ điều hành, trên máy Windows của tôi ;, thường là trong * nix :.)



2

javac HelloWorld.java-classpath ./javax.jar, giả sử javax nằm trong thư mục hiện tại và mục tiêu biên dịch là "HelloWorld.java" và bạn có thể biên dịch mà không cần phương thức chính

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.