2013-01-10 3 views
0

올바른 용어로 올바른 질문을하는 경우 Java에 고유하지 않은 외부 클래스 라이브러리 및 API를 사용하는 것에 대해 충분히 새삼 스럽습니다. 그래서 제가하고있는 일을 설명하겠습니다.Java에서 클래스, 라이브러리, 패키지를 설정하고 사용하려면 어떻게해야합니까?

Excel 파일을 읽고 쓰는 것이 필요합니다. Java-Excel API가있는 this page을 찾았습니다. 이 API를 설치하고 Java (C:\java\)의 로컬 인스턴스에 사용할 수 있도록하여 새 프로그램을 만들 때이 클래스를 가져올 수 있습니다 (예 : import jxl.CellView). sourceforge의 zip 파일이 있지만, 그 후에는 방금 잃었습니다.

Eclipse에서 설정하는 방법에 대한 지침입니다. 나는 IDE로 Eclipse의 팬이 아니기 때문에 "수동으로"하는 방법을 알고 싶다. 나는 그것이 그것이 미래를 위해하는 방식으로 작동하는 이유를 더 잘 이해하는 데 도움이 될 것이라고 생각합니다.

그럼 다음 지시는 ... "Java 프로그램에서이 라이브러리를 사용하려면 프로젝트의 클래스 경로에 lib jxl.jar을 추가하십시오. Eclipse에서 클래스 경로 변경을 참조하십시오." zip 파일을 C:\java에 압축을 풉니 다? 그것은 내 수업 경로가 의미하는 것입니까? 필요에 따라 적절한 클래스를 가져올 수 있도록 여기에서 따라야 할 단계는 무엇입니까?

또한 이러한 클래스는 애플릿과 함께 제공됩니까? Java 프로그램을 컴파일 할 때 해당 파일의 수신자는 실행중인 시스템에이 특정 패키지가 설치되어 있지 않아도 실행할 수 있습니까?

누군가 내게이 문제에 대한 견해를 줄 수 있습니까?

+1

http://docs.oracle.com/javase/tutorial/essential/environment/paths.html –

답변

2

: 자바 \ lib 디렉토리 \. 그렇게하면 JRE와 C : \ java에있는 JDK와는 구분할 수 있습니다. 이것은 꼭 필요한 것은 아니지만 깔끔하게 정리하는 것이 좋습니다. 다음은 관심있는 라이브러리 사용과 관련된 몇 가지 지침입니다.

추출 jexcelapi_2_6_12.zip ~ c:\java\lib\.

이것은 다음 파일이 현재 존재 함을 의미합니다 : C:\java\lib\jexcelapi\jxl.jar.

코드를 별도로 유지하기 위해 c:\java\work에 입력 해 보겠습니다. 텍스트 편집기를 사용하여 파일 c:\java\work\MyClass.java을 만듭니다

import jxl.CellView; 
public class MyClass { 
    public static void main(String[] args) { 
     System.out.println("I can access " + CellView.class); 
    } 
} 

열기 C에 명령 프롬프트 및 디렉토리 변경 : 자바 \ 작업 \.

cd /d c:\java\work

이제 클래스를 컴파일 : 당신이 오류를 얻을 경우

javac -classpath ..\lib\jexcelapi\jxl.jar MyClass.java

이 디렉토리는 이제 컴파일 된 프로그램입니다 새 파일 MyClass.class을 포함해야합니다.

오류가 표시되는 경우 : 'javac'은 내부 또는 외부 명령, 작동 가능한 프로그램 또는 배치 파일로 인식되지 않습니다. 그러면 javac.exe의 전체 경로를 지정할 수 있습니다. \ 자바 \의 jdk1.6.0_37, 또는 시스템에 진실하지 않을 수도 있습니다 :

C:\java\work>java -classpath ..\lib\jexcelapi\jxl.jar;. MyClass :

c:\java\jdk1.6.0_37\bin\javac -classpath ..\lib\jexcelapi\jxl.jar MyClass.java

가 컴파일 된 프로그램을 실행 다음 예는 C에있는 JDK를 가정

출력 :
I가 액세스 할 수있는 클래스 jxl.CellView

공지 세미콜론과 java 클래스 경로 끝의 점 이렇게하면 java가 MyClass.class를 찾을 수 있도록 클래스 디렉토리에 현재 디렉토리가 추가됩니다. javac에는 필요하지 않았습니다.

디렉토리 만 포함해야하는 PATH과 달리 java의 CLASSPATH (또는 -classpath)은 파일과 디렉토리를 모두 포함 할 수 있습니다. 클래스 패스에 파일이 표시되면 JAR 파일이어야합니다. JAR 파일은 단지 zip 파일이므로 클래스 패스에 ZIP 파일이 표시되는 경우가 있습니다. 이것은 비표준이지만 작동합니다. Java는 .zip 파일을 .jar로 취급합니다. 두 번째 라이브러리를 프로그램에 추가해야하는 경우 파일을 세미콜론 (Windows) 또는 콜론 (* nix)으로 구분하십시오.

javac -classpath ..\lib\jexcelapi\jxl.jar;..\lib\lib-2.0\lib-2.0.jar MyClass.java

때때로 라이브러리는 하나 개 이상의 jar 파일로 구성되어 있습니다. 이 경우, 라이브러리의 일부인 모든 JAR 파일을 클래스 경로에 추가해야합니다. 다시 세미콜론으로 구분하십시오. 이것이 지루한 것처럼 보인다면 사람들이 IDE 나 Ant를 사용하여 커맨드 라인 명령이 아닌 Java로 작업하는 이유를 알 수 있습니다.

-classpath 명령 줄 인수 대신 환경 변수 CLASSPATH를 사용하여 PATH에 JDK bin 디렉토리를 추가하고 클래스 경로에 항목을 두 개 이상 추가하는 등 환경 변수 CLASSPATH를 사용하여 패키지를 사용하는 방법을 배우는 것이 좋습니다. 개발을위한 IDE와 빌드를위한 Maven/Ant를 사용하여 자신 만의 JAR을 생성하고 재사용 할 수있는 셸 스크립트를 만드는 것 ... 배우려는 것들의리스트가 계속해서 나온다. 이 게시물은 베스트 프랙티스를 나타내는 것이 아니라 신속하게 운영 할 수 있도록하기위한 것입니다. Java 개발 환경을 개선하기 위해 인터넷에 게시 된 Oracle 설명서 및 기타 모범 사례를 따르십시오.

또한 이러한 클래스는 애플릿과 함께 제공됩니까?
프로그램이 결국 애플릿이 될 경우 예, jxl.jar을 프로그램과 함께 배포해야합니다. 사람들이 자신의 컴퓨터에이 프로그램을 설치하거나 다운로드하려고하지 않을 것입니다 자신에. 여기서 애플릿을 만드는 방법을 설명하지는 않을 것입니다. 웹에는 많은 리소스가 있습니다. Google에 문의하십시오. 문제가 발생한 구체적인 질문이 있습니다.

Java 프로그램을 컴파일 할 때 해당 파일의 수신자는이 특정 패키지가 실행중인 시스템에이 패키지가 설치되어 있지 않아도 실행할 수 있습니까?
jxl 라이브러리가 프로그램에 컴파일되지 않습니다. 프로그램과 함께 사용자에게 어떻게 든 jxl 라이브러리를 제공해야합니다. 대부분의 프로그램은 하나 이상의 Java 클래스로 구성되어 있기 때문에 프로그램을 JAR 파일로 묶어야합니다. 이는 프로그램이 여러 개의 .class 파일로 구성된다는 것을 의미합니다. 이 문제에 접근하는 데는 여러 가지 방법이 있습니다. 애플릿을 만드는 방법에 대한 자료를 읽은 후 좀 더 구체적인 질문으로 stackoverflow로 돌아가십시오.

+0

AWESOME! 고마워요. 이렇게하면 슬리브를 굴리고 API로 작업하기 시작하면 물어볼 질문을 배우기에 충분합니다. – dwwilson66

+1

모든 라이브러리를 단일 디렉토리에 추가하지 않는 것이 좋습니다. (Maven과 같은 실제 버전 시스템을 사용할 때 일반적으로 발생하는) 버전별로 명시 적으로 지정하지 않으면 여러 버전이있는 즉시 문제를 묻습니다.또한 Java 클래스 경로에는 와일드 카드가 포함될 수 있습니다. 특히 임의의 버전을 디렉토리에 넣는 경우에는 클래스 로더를 사용하는 것이 좋습니다. 프로젝트 별 라이브러리 디렉토리를 유지하는 것이 좋습니다. –

+0

@DaveNewton 내가 사용하는 라이브러리 중 95 %는 정상적으로 추출 될 때 그들이 만드는 디렉토리에 버전 번호를 포함합니다. 이것은 c : \ java \ lib에 정리 된 것을 유지하기에 충분합니다. 불행히도 "jexcelapi"는 이것을하지 않습니다. 개인적으로 앞으로 이동하기 전에 "jexcel"디렉토리의 이름을 "jexcel-2.6.12"로 바꿀 것입니다. 그리고/또는 프로젝트 관련 lib 디렉토리를 사용하십시오. 그러나 실용적으로 보자.이 녀석은 기본'java' +'javac'를 성공적으로 실행할 수조차 없었다. "모범 사례"를 얼마나 혼란에 빠뜨리는 지에 대한 한계가 있습니다. –

1

명령 줄로 이동하십시오. 그것은 디렉토리의 목록을 반환해야

echo %CLASSPATH% 

:에

입력합니다. 임포트하려는 라이브러리를 그 라이브러리에 넣을 수 있습니다.

읽기 : http://docs.oracle.com/javase/tutorial/essential/environment/paths.html

+0

'echo % CLASSPATH %'는 C : \ Program Files \ Java \ jre6 \ lib \ ext \ QTJava를 리턴합니다. .zip'은 나에게 의미가 없지만 경로는 zip 파일입니까? DOS 3.3과 edlin (shudder)에 깊이 익숙해 진 이후로 경로가 변경되지 않았다면 어떻게 작동하는지 알 수 없습니다. 내가 뭘 놓치고 있니? – dwwilson66

+0

그런 경우 튜토리얼의 지침을 사용하여 classpath에 디렉토리를 추가하고 그 디렉토리 – Adam

+0

에 넣으십시오. 따라서 zip 파일은 기본적으로 잘못된 경로가 설정되었음을 나타냅니다. 그냥 왜 정의되지 않은 변수 오류를 반환하지 않았는지, 내 클래스 패스가 zip 파일 인 경우 왜 일을하는지 이해하려고 노력합니다 ... – dwwilson66

0

클래스 경로는 디렉토리와이 필요로되는 자바 클래스를로드에서 .jar 파일의 목록입니다. 일부 디렉토리와 jar는 기본적으로 (기본적으로 Java 설치와 함께 제공되는 라이브러리), 다른 것들은 사용자가 지정해야합니다.

추가로 지정하는 한 가지 방법은 환경 변수 CLASSPATH입니다. 둘 이상의 항목이있는 경우 플랫폼의 경로 구분 기호 (Windows의 경우 세미콜론, 대부분의 다른 시스템의 경우 콜론)로 구분하십시오.

컴파일러 또는 java 가상 시스템을 시작할 때 다른 방법은 -classpath 옵션입니다.

귀하의 경우에는

는 (예를 들어 /some/path/jxl.jar)를 어딘가에 jxl.jar 파일을 넣어 다음과 같이 컴파일러 호출 (가정을, MyClass의 기본 패키지에 현재 디렉토리에 저장)

javac -classpath /some/path/jxl.jar:. MyClass.java 

하고 실행하기를 당신이 jxl.jar이 zip 파일에

java -classpath /some/path/jxl.jar:. MyClass 
+0

(예 : 현재 디렉토리를 명시 적으로 포함해야 할 수도 있습니다. IIRC는 Java 버전에 따라 다릅니다.) –

+0

@DaveNewton이 올바른 예입니다. – Henry

관련 문제