커맨드 라인에서 클래스 경로에 항아리 포함 (javac 또는 apt)


137

이 프로그램을 실행하려고합니다. 나는 모든 웹 서비스를 설정하려면 apt를 실행해야한다고 생각합니다. (javac를 사용하더라도 동일한 문제가 있습니다). 내가 얻는 것은 컴파일 오류라고 생각합니다. (아래에 표시).

내가해야 할 일은 jsr181-api.jar (source) 클래스 경로 에이 항아리를 포함시키는 것입니다 . 이것을 할 수있는 간단한 임시 방법이 있습니까 (태양 광에서)? 내 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항아리.
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 사용자의 경우 jar는로 구분 ;하고 그렇지 않아야 :합니다.

예를 들면 다음과 같습니다. 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.  

(클래스 경로에서 항목을 구분하는 데 사용되는 구분 기호는 OS마다 다르며, 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"라고 가정하고 기본 메소드없이 컴파일 할 수 있음

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.