실행 가능한 jar 파일을 여는 것보다. 명령줄에서 jar 파일 실행

이제 애플리케이션 서버와 같은 환경 없이 간단한 Java 프로그램을 실행할 수 있는 방법을 보여 드리겠습니다. 하나의 클래스로 충분하며 이 클래스에서 정의됩니다. 주요 방법.

packagecom.blogspot;
공개 클래스 DeveloperRemarks(
공개 정적 무효 메인(문자열 인수) (
if (args.length == 0) (
시스템아웃
.println("매개변수로 전달하세요. 명령줄보고 싶은 텍스트입니다.");
) 또 다른 (
System.out.println("입력하신 내용: " + args);
}
System.out.println("developer-remarks.blogspot.com에서 소스를 사용할 수 있습니다.");
}
}
명령줄에서 프로그램을 시작할 때 화면에 표시될 텍스트를 전달해야 합니다. 그렇지 않으면 해당 메시지가 표시됩니다. 프로그램에 전달된 모든 매개변수는 기본 메소드가 사용하는 문자열의 args 배열에 포함됩니다. 매개변수가 전달되지 않으면 배열의 길이는 0이 됩니다.

이제 터미널에서 jar 파일을 실행하도록 Eclipse를 구성해 보겠습니다. 이렇게 하려면 먼저 시작 구성을 생성해야 합니다. 선택 상위 메뉴실행 - 구성을 실행합니다. 다음 창이 열립니다:

왼쪽 목록에서 애플리케이션 유형(Java 애플리케이션)을 선택합니다. 거기에서 생성 새로운 구성스크린샷에 표시된 대로. 이렇게 하려면 기본 메서드가 있는 대상 프로젝트와 클래스를 선택합니다.

이제 프로젝트를 실행 가능한 jar 파일로 내보낼 준비가 되었습니다. 이렇게 하려면 프로젝트를 클릭하세요. 마우스 오른쪽 버튼으로 클릭마우스로 "내보내기..."를 선택하면 다음 창이 열립니다:


트리 목록에서 Runnable Jar 파일을 선택합니다. 프로젝트 유형을 이름으로 필터링하면 검색이 크게 단순화될 수 있습니다. 마침을 클릭합니다. 그런 다음 내보내기 설정 창이 열립니다.


여기에서 이전에 생성한 시작 구성을 선택합니다. 그런 다음 지정하십시오. 이름 jar 파일. "라이브러리 처리" 섹션에서 "생성된 JAR로 필요한 라이브러리 추출"을 선택합니다. 필수 라이브러리생성된 아카이브 내부). 마침을 클릭하면 실행 가능한 아카이브가 생성됩니다.

이후 이 예에서는다른 라이브러리에 대한 종속성이 없으면 첫 번째 항목을 선택합니다. 그러나 수십 또는 심지어 수백 개의 종속성이 있는 경우 "생성된 JAR 옆의 하위 폴더에 필요한 라이브러리를 복사"(필요한 라이브러리를 하위 디렉터리에 복사) 세 번째 항목을 선택하는 것이 더 정확할 것입니다. 실행 파일이 커지는 것을 방지하기 위해 이름이 생성되는 아카이브와 일치합니다. 세 번째 옵션을 선택했다면 필요한 라이브러리가 다음 위치에 복사되었을 것입니다. 별도의 폴더.

이제 터미널을 열고 실행 가능한 jar 파일이 생성된 디렉터리로 이동합니다. 다음 명령을 입력하십시오.

자바 항아리개발자-remarks.jar hello\world\!

이렇게 하면 Java 인터프리터에게 아카이브를 실행하도록 지시할 수 있습니다. 공간과 느낌표명령줄에서는 백슬래시로 이스케이프해야 합니다.

시연된 접근 방식은 교육 및 테스트 목적으로 유용할 수 있습니다. 예를 들어, EJB를 호출하고 해당 작업 결과를 콘솔에 표시하는 클라이언트를 생성하려는 경우입니다. 위엄 이 접근법환경없이 jar 아카이브를 시작하는 것입니다. JDK/JRE만 있으면 충분합니다. 소스를 사용할 수 있습니다.

많은 초보 프로그래머는 다음과 같은 질문에 직면합니다. IDE이제 IDE 외부 명령줄에서 이 응용 프로그램을 작동시키려면 어떻게 해야 합니까?" 발생할 수 있는 질문은 "다른 사용자에게 전체 IDE를 동시에 제공하지 않고 어떻게 이 응용 프로그램을 다른 사용자에게 배포할 수 있습니까?"입니다.

이러한 질문에 대한 답은 상대적으로 간단하지만 항상 명확한 것은 아닙니다. 안에 이 문서배포 및 배포용 애플리케이션을 준비하기 위해 IDE를 사용하는 기본 사항을 보여줌으로써 질문에 답합니다. 이 문서는 또한 프로그래머가 시스템을 구성하는 데 필요할 수 있는 정보(또는 응용 프로그램 사용자에게 전달해야 할 수 있는 정보)도 제공합니다. 몇 가지를 보여드리겠습니다. 다양한 접근법사용자가 다음을 통해 액세스할 수 있는 애플리케이션을 배포합니다.

  • 애플리케이션의 JAR(Java Archive) 파일을 두 번 클릭합니다.
  • 명령줄에서 애플리케이션을 호출합니다.
  • 스크립트 파일에서 애플리케이션 호출.
  • 용도 자바 웹시작.

이 교육 과정에는 아래 표에 나열된 소프트웨어와 자료가 필요합니다.

실행 가능한 JAR 파일 생성

이 부분에서는 훈련 과정 IDE에서 배포 가능한 애플리케이션을 생성한 다음 IDE 외부에서 해당 애플리케이션을 실행하는 방법을 보여줍니다. 우리는 이 애플리케이션을 다음과 같이 패키징합니다. 실행 가능 파일항아리.

JAR 파일은 파일과 폴더를 포함할 수 있는 아카이브 파일입니다. JAR 파일은 ZIP 파일과 유사하지만 JAR 파일은 다음을 가질 수 있습니다. 추가 속성, 배포에 유용 자바 애플리케이션. 이러한 속성에는 JAR 파일의 디지털 서명, 추가 압축, 플랫폼 간 호환성 등이 포함됩니다.

이 연습에서는 IDE 프로젝트를 만든 다음 미리 작성된 두 개의 파일을 이 프로젝트에 배치합니다. 소스 코드자바. 그런 다음 클래스를 컴파일하고 실행 가능한 JAR 파일을 만듭니다. 그런 다음 IDE 외부에서 JAR 파일을 실행하는 방법을 살펴보겠습니다.

사용되는 클래스 이 설명서, 기능 구현 유틸리티 프로그램텍스트나 패턴을 검색하는 데 사용할 수 있는 GNU grep 정규 표현식 V 텍스트 파일. 이 프로젝트애플리케이션의 명령줄 버전과 다음을 사용하는 버전이 모두 포함되어 있습니다. GUI, 이를 통해 다음을 볼 수 있습니다. 다양한 방법응용 프로그램을 시작하십시오.

기존 소스 코드 파일을 사용하여 프로젝트 만들기

  1. 다른 사용자에게 애플리케이션 배포

    이제 애플리케이션이 IDE 외부에서 실행되는 것을 확인했으므로 배포로 넘어갈 수 있습니다.

    메모.애플리케이션이 JDK에 포함된 라이브러리 이외의 추가 라이브러리에 의존하는 경우 해당 라이브러리를 배포판에 포함해야 합니다(이 예제에는 해당되지 않음). 이러한 라이브러리에 대한 상대 경로는 IDE에서 애플리케이션을 개발할 때 JAR 매니페스트 파일의 클래스 경로 항목에 추가됩니다. 만약 이러한 추가 라이브러리다음에서 찾을 수 없습니다. 지정된 경로수업(예: 상대 경로) 실행하면 애플리케이션이 시작되지 않습니다.
    만들다 ZIP 아카이브 JAR 파일과 라이브러리가 포함된 다음 이것을 게시하세요. 압축 파일사용자. JAR 파일과 라이브러리 JAR 파일이 동일한 폴더에 있도록 사용자에게 이 ZIP 아카이브를 추출하도록 지시합니다. 애플리케이션 JAR 파일을 실행합니다.

    자바 애플리케이션 실행

    이 연습의 목적은 명령줄에서 애플리케이션을 실행하는 몇 가지 방법을 보여주는 것입니다.

    이 연습에서는 다음 두 가지 방법으로 Java 애플리케이션을 시작하는 방법을 보여줍니다.

    • 명령줄에서 java 명령을 실행합니다.
    • 스크립트를 사용하여 JAR 파일에서 클래스를 호출합니다.

    명령줄에서 애플리케이션 실행

    java 명령을 사용하여 명령줄에서 애플리케이션을 시작할 수 있습니다. 실행 가능한 JAR 파일을 실행해야 하는 경우 명령의 -jar 옵션을 사용하십시오.

    예를 들어 AnotherGrep 애플리케이션을 시작하려면 다음을 수행해야 합니다.

    1. 터미널 창을 엽니다. 시스템에서 마이크로소프트 윈도우"시작" 버튼을 클릭하고 "실행..."을 선택하면 됩니다. cmd 입력"열기:" 필드를 클릭하고 "확인" 버튼을 클릭하세요.
    2. 디렉토리로 이동 PROJECT_HOME/dist(cd 명령 사용)
    3. 입력하다 다음 줄기본 애플리케이션 클래스를 실행하려면: java -jar AnotherGrep.jar

    이 지침을 따랐는데도 응용 프로그램이 시작되지 않으면 다음 중 하나를 수행해야 합니다. 다음 단계:

    스크립트에서 애플리케이션 실행

    배포하려는 애플리케이션이 콘솔 애플리케이션, 특히 응용 프로그램을 실행하는 데 길고 복잡한 인수가 필요한 경우 스크립트에서 실행하는 것이 더 편리할 수 있습니다. 이 섹션에서는 스크립트에서 호출된 JAR 파일에 인수(검색 패턴 및 파일 목록)를 전달해야 하는 Grep의 콘솔 버전을 사용합니다. 명령줄 입력 양을 줄이기 위해 테스트 애플리케이션 실행에 적합한 간단한 스크립트를 사용합니다.

    우선, 애플리케이션의 기본 클래스를 클래스의 콘솔 버전으로 변경하고 JAR 파일을 다시 빌드해야 합니다.

    1. IDE의 프로젝트 창에서 프로젝트 노드(AnotherGrep)를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
    2. Run 노드를 선택하고 Main Class 속성을 anothergrep.Grep(다른grep.xGrep에서)로 변경합니다. 확인을 클릭하여 프로젝트 속성 창을 닫습니다.
    3. 프로젝트 노드를 다시 마우스 오른쪽 버튼으로 클릭하고 프로젝트 정리 및 빌드를 선택합니다.

    이러한 단계가 완료되면 JAR 파일이 다시 빌드되고 JAR 파일 매니페스트의 Main-Class 속성이 anothergrep.Grep 을 가리킵니다.

    Bash 스크립트 - UNIX 및 Linux 컴퓨터용

    파일 내용이 추출된 폴더에서 grep.sh라는 bash 스크립트를 찾을 수 있습니다. 그것을 살펴보자:

    #!/bin/bash java -jar dist/AnotherGrep.jar $@

    첫 번째 줄은 이 스크립트를 해석하는 데 사용해야 하는 명령 해석기를 지정합니다. 두 번째는 폴더에 IDE에서 생성한 JAR 파일을 실행합니다. PROJECT_HOME/거리 $@는 스크립트에 전달된 모든 인수를 복사하고 각 인수를 따옴표로 묶습니다.

    이 시나리오는 다음을 의미합니다. 바이너리 파일자바는 일부 환경 변수길. 이 스크립트가 컴퓨터에서 작동하지 않으면 참조하십시오.

    추가 정보스크립트 작성에 대해 배쉬 통역사찾을수있다 .

    Windows 컴퓨터용 Script.bat

    ~에 마이크로소프트 컴퓨터 Windows 배치한 번에 최대 9개의 인수를 파일에 전달할 수 있습니다. 인수가 9개보다 많으면 JAR 파일을 여러 번 실행해야 합니다.

    이에 대한 스크립트는 다음과 같습니다.

    @echo off set jarpath="dist/AnotherGrep.jar" set 패턴="%1" Shift:loop if "%1" == "" goto:allprocessed set files=%1 %2 %3 %4 %5 %6 %7 %8 %9 java -jar %jarpath% %pattern% %files% for %%i in (0 1 2 3 4 5 6 7 8) do Shift goto:loop:allprocessed

    이 스크립트를 실제로 보려면 아카이브 내용이 추출된 폴더의 grep.bat 이름 아래에서 찾을 수 있습니다.

    9개의 인수가 내부에 표시됩니다. 배치 파일어떻게 % , 어디 이내에 값이 있어야 합니다.<0-9>. %0은(는) 스크립트 이름으로 예약되어 있습니다.

    한 번에 9개의 인수만 (하나의 루프에서) 프로그램에 전달되는 것을 볼 수 있습니다. for 문은 단순히 인수를 9만큼 이동하여 다음 루프를 준비합니다. if 문이 빈 파일 인수를 발견하면 루프가 종료됩니다(이는 처리할 새 파일이 없음을 나타냅니다).

    배치 스크립트에 대한 자세한 내용은 에서 확인할 수 있습니다.

    Java Web Start용 애플리케이션 패키징

    Java Web Start는 한 번의 클릭으로 웹 브라우저에서 Java 애플리케이션을 시작하는 데 사용되는 기술입니다. Java Web Start를 사용한 배포용 애플리케이션 패키징에 대한 자세한 내용은 NetBeans IDE에서 Java Web Start 활성화를 참조하세요. 여기서만 소개합니다 간단한 설명애플리케이션을 배포 가능하게 만드는 데 필요한 단계 자바를 사용하여 웹스타트.

    1. 프로젝트 창에서 프로젝트 노드를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
    2. 프로젝트 속성 창의 Web Start 탭에서 Web Start 활성화 확인란을 선택합니다.
    3. 코드베이스 드롭다운 목록(" 코드베이스") 로컬 실행만 테스트할 것이기 때문입니다.
      다른 모든 설정은 기본값으로 유지하고 확인을 클릭합니다.
    4. 프로젝트 노드를 마우스 오른쪽 버튼으로 클릭하고 프로젝트 정리 및 빌드를 선택합니다.
      이 명령 IDE는 이전에 컴파일된 모든 파일과 빌드 결과를 삭제하고, 애플리케이션을 다시 컴파일하고, 새 매개변수를 사용하여 프로젝트를 빌드합니다.
    5. IDE 외부에서 폴더를 엽니다. PROJECT_HOME/dist를 클릭한 다음 브라우저에서 launch.html 파일을 엽니다.
      테스트 화면이 나타납니다. HTML 페이지실행 버튼으로.
    6. 실행 버튼을 클릭하여 애플리케이션을 엽니다.
      Java가 로드되고 애플리케이션이 실행되는 것을 볼 수 있습니다.

      메모.일부 브라우저는 먼저 사용자를 페이지로 리디렉션합니다. 자바 다운로드.

    JAR 파일 연결 지정

    대부분의 컴퓨터에서는 실행 가능한 JAR 파일을 두 번 클릭하기만 하면 실행할 수 있습니다. JAR 파일을 두 번 클릭해도 아무 일도 일어나지 않으면 다음 두 가지 중 하나가 원인일 수 있습니다. 다음과 같은 이유:

    • JAR 파일 형식이 환경과 연결되어 있지 않습니다. 자바 실행(JRE)를 이 컴퓨터에 설치하세요.

      JAR 파일 유형이 JRE에 매핑된 경우 해당 파일을 나타내는 아이콘에는 Java 로고가 포함되어야 합니다.

    • JAR 파일 유형은 JRE에 매핑되지만 -jar 매개변수는 아이콘을 두 번 클릭할 때 JRE에 전달되는 명령의 일부가 아닙니다.

    메모.때때로 JAR 파일 연결은 설치된 소프트웨어에 의해 전환됩니다. 소프트웨어 zip 형식의 파일을 처리하는 데 사용됩니다.

    JAR 파일 유형을 도구와 연결하는 방법 자바를 시작하다, 운영 체제에 따라 다릅니다.

    컴퓨터에 JRE 버전 중 하나가 설치되어 있는지 확인하십시오. 버전 1.4.2 이상을 사용해야 합니다. Java 응용 프로그램은 다음이 없는 컴퓨터에서는 실행할 수 없습니다. 자바 플랫폼. (개발 키트를 설치하는 경우 자바 언어(JDK) JRE도 함께 ​​설치됩니다. 단, 프로그래머가 아닌 사람에게 프로그램을 배포하는 경우에는 사용자가 JRE나 JDK를 사용하지 못할 수도 있습니다.)

    • 윈도우 XP의 경우 설치된 버전 Java는 "시작" > "제어판" > (프로그램 추가/제거)를 선택하여 확인할 수 있습니다(예를 들어 Java(TM) 6 업데이트 33이 나열되어야 함).
    • ~에 윈도우 비스타또는 7개 설치됨 자바 버전"시작" > "제어판" > ("프로그램 및 기능")을 선택하여 확인할 수 있습니다(예를 들어 Java(TM) 6 업데이트 33이 나열되어 있어야 합니다).

    컴퓨터에 Java 플랫폼이 없는 경우 Java SE 다운로드 사이트에서 JRE를 다운로드할 수 있습니다.

    컴퓨터에 JAR 파일 연결이 이미 있지만 파일 연결이 작동하지 않는 경우 다음 단계에 따라 Microsoft Windows에서 JAR 파일 연결을 추가하세요.

    1. 시작 > 제어판을 선택합니다.
    2. (Windows Vista에만 적용 가능). 제어판 > 프로그램을 클릭합니다.

    3. Windows Vista 또는 7의 경우 "기본 프로그램"을 클릭하고 "파일 형식 또는 프로토콜을 프로그램과 연결"을 선택하십시오.
    4. (Windows XP의 경우 대화 상자의 세부 정보 섹션에서 프로그램 변경을 클릭합니다.)
    5. 프로그램 선택 대화 상자에서 다음을 선택합니다. 자바 플랫폼 SE 바이너리.
    6. 확인을 클릭하여 프로그램 선택 대화 상자를 종료합니다.
    7. 닫기를 클릭하여 폴더 옵션 대화 상자(Windows XP)나 파일 형식 또는 프로토콜 연결 대화 상자를 닫습니다. 특정 프로그램(윈도우 7의 경우).

    메모. JAR 파일이 시스템의 Java Platform SE Binary와 연결되어 있지만 더블 클릭여전히 JAR 파일을 실행하지 않으면 파일 연결에 -jar 매개변수를 지정해야 할 수도 있습니다.

    Microsoft Windows XP에서 파일 연결에 -jar 옵션을 지정하려면 다음 단계를 따르세요.

    1. 시작 > 제어판을 선택합니다.
    2. Windows XP에서는 폴더 옵션을 두 번 클릭하고 파일 형식 탭을 선택합니다.
    3. 등록된 파일 유형 목록에서 JAR 파일을 선택하십시오.
    4. 대화 상자의 세부 정보 섹션에서 고급을 클릭합니다.
    5. 파일 형식 속성 편집 대화 상자에서 편집...을 클릭합니다.
    6. "작업을 실행하는 애플리케이션" 텍스트 상자에서 JRE 경로 끝에 다음 줄을 추가합니다. -jar "%1" %* 그런 다음 필드에는 "C:\Program Files\Java"와 유사한 텍스트가 포함되어야 합니다. \jre1.6.0_33\ bin\javaw.exe" -jar "%1" %*
    7. 확인을 클릭하여 유형 작업 편집 대화 상자를 종료합니다.
    8. 확인을 클릭하여 파일 형식 속성 변경 대화 상자를 종료합니다.
    9. 닫기를 클릭하여 폴더 옵션 대화 상자를 종료합니다.

    메모. Windows Vista부터는 RegEdit를 사용하여 확장된 파일 연결을 구성할 수 있습니다. 자세한 내용은 파일 형식 대화 상자는 어떻게 되었나요?를 참조하세요. .

    UNIX 및 Linux 시스템의 경우 파일 연결을 변경하는 절차는 사용 중인 데스크탑 환경(예: GNOME 또는 KDE)에 따라 다릅니다. 설정을 살펴보세요 근무 환경또는 워크벤치 문서를 검토하세요.

    PATH 환경 변수 설정

    컴퓨터가 실행되지 않는 경우 자바 클래스 JDK 또는 JRE의 위치를 ​​지정하지 않고 JAR 파일이나 JAR 파일을 복사하는 경우 시스템 PATH 환경 변수의 값을 변경해야 할 수도 있습니다.

    근무할 때 마이크로소프트 시스템 Windows 절차 PATH 변수 설정은 사용 중인 Windows 버전에 따라 다릅니다.

    다음은 PATH 변수를 설정하는 단계입니다. 윈도우 시스템 XP:

    1. 시작 > 제어판을 선택하고 시스템을 두 번 클릭합니다.
    2. 시스템 속성 대화 상자에서 고급 탭을 선택합니다.
    3. 환경 변수 탭을 클릭합니다.
    4. 사용자 환경 변수 목록에서 PATH를 선택하고 편집 버튼을 클릭합니다.
    5. 경로 목록 끝에 JRE 위치를 추가합니다. 목록의 위치는 세미콜론(;)으로 구분됩니다.
      예를 들어 JRE가 C:\Program Files\Java\jdk1.6.0_23에 있는 경우 PATH 변수 끝에 다음을 추가합니다. C:\Program Files\Java\jdk1.6.0_23\bin
    6. 확인을 클릭하여 환경 변수 대화 상자를 종료한 다음 확인을 클릭하여 시스템 속성 대화 상자를 종료합니다.

    수술실에서 일할 때 유닉스 시스템또는 리눅스 방식 PATH 환경 변수에 대한 변경 사항은 사용 중인 명령 해석기 프로그램에 따라 다릅니다. 자세한 내용은 명령 해석기 설명서를 참조하세요.

    무엇 향후 계획?

    NetBeans IDE 작업에 대한 자세한 내용은 NetBeans 웹 사이트를 참조하십시오.

    클래스 경로 관리를 포함하여 IDE에서 Java 애플리케이션을 개발하는 방법에 대한 자세한 내용은 문서에서 확인할 수 있습니다.

요즘에는 더 이상 콘솔에서 프로그램을 만드는 사람이 없습니다. 좋아하는 IDE를 사용하는 개발자는 다른 사람의 컴퓨터에 해당 IDE가 없으면 불편함을 느낍니다.
Ant와 Maven의 작업을 이해하기로 결정한 후, 콘솔에서 Ant와 Maven이 없으면 애플리케이션을 구축할 수 없다는 것을 깨달았습니다.
이 기사에서는 인터넷에서 각 명령에 대한 도움말을 검색하지 않도록 데모 응용 프로그램을 설계하는 모든 단계를 다루려고 노력했습니다.

간단한 것부터..

각 프로그램은 일반적으로 별도의 디렉토리에 포함되어 있습니다. 나는 이 디렉토리에 다음을 생성하는 규칙을 준수합니다. 적어도두 개의 폴더: src와 bin. 첫 번째에는 소스 코드가 포함되어 있고 두 번째에는 컴파일 결과가 포함되어 있습니다. 이러한 폴더는 패키지에 따라 디렉터리 구조를 갖습니다.

파일 1개

추가 폴더 없이도 할 수 있습니다.
파일 자체를 가져 갑시다.
01 02 03 04 05 06 07 08 09 공용 클래스 HelloWorld( public static void main(String args) ( System.out.println(" 안녕하세요 세계!"); 계산기 calc=new Calculator(); System.out.println("2+2="+calc.sum(2,2)); ) )
해당 디렉토리로 이동하세요. 이 파일, 명령을 실행합니다.
javac HelloWorld.java HelloWorld.class 파일이 이 폴더에 나타납니다. 이는 프로그램이 컴파일되었음을 의미합니다. 시작하려면
자바 클래스 경로. 헬로월드

소스에서 바이너리 파일 분리

이제 동일한 작업을 수행하지만 카탈로그를 사용합니다. HelloWorld 디렉터리를 만들고 그 안에 src와 bin이라는 두 개의 폴더가 있습니다.
컴파일 중
javac -d bin src/HelloWorld.java 여기서는 다음을 지정했습니다. 바이너리 파일별도의 파일에 저장됩니다 빈 폴더출처와 혼동하지 마세요.

발사하자
java -classpath ./bin HelloWorld

우리는 패키지를 사용합니다

그렇지 않으면 갑자기 프로그램이 HelloWorld로 기능하지 않게 됩니다. 패키지를 명확하게 제공하는 것이 좋습니다. 고유한 이름. 이것은 추가됩니다 이 프로그램이름 충돌 없이 다른 프로젝트로. 일부 기사를 읽은 후에는 패키지 이름에 반드시 도메인이 필요하다고 생각할 수도 있습니다. 이것은 잘못된 것입니다. 도메인은 편리한 방법독특함을 얻으세요. 자신의 도메인이 없다면 웹사이트의 계정(예: ru.habrahabr.mylogin)을 사용하세요. 그것은 독특할 것이다. 패키지 이름은 소문자여야 합니다. 그리고 특수문자는 사용하지 마세요. 인해 문제가 발생합니다. 다양한 플랫폼및 파일 시스템.

com.qwertovsky.helloworld라는 패키지에 클래스를 넣겠습니다. 이렇게 하려면 파일 시작 부분에 해당 줄을 추가하세요.
패키지 com.qwertovsky.helloworld; 파일 경로가 src/com/qwertovsky/helloworld/HelloWorld.java와 같도록 src 디렉터리에 추가 디렉터리를 만들어 보겠습니다.
컴파일 중
javac -d bin src/com/qwertovsky/helloworld/HelloWorld.java bin 디렉토리는 src와 유사한 디렉토리 구조를 자동으로 생성합니다.
HelloWorld "---bin" "---com " "---qwertovsky " "---helloworld " "---HelloWorld.class "---src "---com "---qwertovsky "-- -helloworld "---HelloWorld.java 실행
java -classpath ./bin com.qwertovsky.helloworld.HelloWorld

프로그램에 여러 개의 파일이 있는 경우

프로그램을 바꿔보자. 논리에주의를 기울이지 마십시오. 그녀는 사라 졌어요.
HelloWorld.java
01 02 03 04 05 06 07 08 09 10 11 12 13 패키지 com.qwertovsky.helloworld; 공용 클래스 HelloWorld( public static void main(String args) ( int a=2; int b=3; 계산기 calc=new Calculator(); System.out.println("Hello World!"); System.out.println( a+"+"+b+"="+calc.sum(a,b));
계산기.java
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 패키지 com.qwertovsky.helloworld; import com.qwertovsky.helloworld.Operation.Adder; 공용 클래스 계산기 ( public int sum(int... a) ( Adder adder=new Adder(); for(int i:a) ( adder.add(i); ) return adder.getSum(); ) )
Adder.java
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 패키지 com.qwertovsky.helloworld.Operation; 공용 클래스 Adder ( private int sum; public Adder() ( sum=0; ) public Adder(int a) ( this.sum=a; ) public void add(int b) ( sum+=b; ) public int getSum() ( 반환 금액; ) )
컴파일 중
javac -d bin src/com/qwertovsky/helloworld/HelloWorld.java src\com\qwertovsky\helloworld\HelloWorld.java:9: 기호 기호를 찾을 수 없습니다: 클래스 계산기 위치: 클래스 com.qwertovsky.helloworld.HelloWorld 계산기 calc=new 계산자(); ^ src\com\qwertovsky\helloworld\HelloWorld.java:9: 기호 기호를 찾을 수 없습니다: 클래스 계산기 위치: 클래스 com.qwertovsky.helloworld.HelloWorld 계산기 calc=new Calculator(); ^2 오류 컴파일에는 사용된 클래스(Calculator 클래스)의 소스 코드가 포함된 파일이 필요하기 때문에 오류가 발생했습니다. -sourcepath 스위치를 사용하여 컴파일러에 대한 파일이 있는 디렉터리를 지정해야 합니다.
컴파일 중
javac -sourcepath ./src -d bin src/com/qwertovsky/helloworld/HelloWorld.java 실행
java -classpath ./bin com.qwertovsky.helloworld.HelloWorld Hello Word 2+3=5

결과가 의외라면

디버거를 시작할 수 있습니다. 이것이 바로 jdb의 목적입니다.
먼저 디버거에 정보가 포함되도록 -g 스위치를 사용하여 컴파일합니다.
javac -g -sourcepath ./src -d bin src/com/qwertovsky/helloworld/HelloWorld.java 디버거 실행
jdb -classpath bin -sourcepath src com.qwertovsky.helloworld.HelloWorld jdb 초기화 중 ... > 디버거가 해당 작업을 시작합니다. 국내선 터미널명령을 입력합니다. 후자에 대한 도움말은 help 명령을 사용하여 표시할 수 있습니다.
Calculator 클래스의 9행에 중단점을 지정합니다.
> com.qwertovsky.helloworld.Calculator:9에서 중지합니다. 중단점 com.qwertovsky.helloworld.Calculator:9를 연기합니다. 클래스가 로드된 후에 설정됩니다. 실행을 시작해 보겠습니다.
> run run com.qwertovsky.helloworld.HelloWorld 포착되지 않은 설정 java.lang.Throwable 지연된 포착되지 않은 설정 java.lang.Throwable > VM 시작됨: 지연된 중단점 설정 com.qwertovsky.helloworld.Calculator:9 Hello World! 중단점 적중: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=9 bci=0 9 Adder adder=new Adder(); 방향을 파악하기 위해 소스 코드를 표시할 수 있습니다. 이 순간커서가 위치해 있습니다.
메인 목록 5 공용 클래스 계산기 6 ( 7 public int sum(int... a) 8 ( 9 => Adder adder=new Adder(); 10 for(int i:a) 11 ( 12 adder.add(i); 13 ) 14 return adder.getSum(); a가 무엇인지 알아보세요.
메인 인쇄 a a = int의 인스턴스(id=340) 메인 덤프 a a = ( 2, 3 ) com.qwertovsky.helloworld.Operation.Adder:19의 메인 중지 중단점 com.qwertovsky.helloworld.Operation.Adder:19 연기. 클래스가 로드된 후에 설정됩니다. 계속해서 실행해보자.
main cont > 지연된 중단점 설정 com.qwertovsky.helloworld.Operation.Adder:19 중단점 적중: "thread=main", com.qwertovsky.helloworld.Operation.Adder.add(), line=19 bci=0 19 sum+=b ; 메인 리스트 15 ) 16 17 public void add(int b) 18 ( 19 => sum+=b; 20 ) 21 22 public int getSum() 23 ( 24 return sum; 메인 인쇄 합계 sum = 0 메인 인쇄 b b = 2 코드 V 현재 라인그러면 합이 2가 되는 것을 볼 수 있습니다.
메인 단계 > 단계 완료됨: "thread=main", com.qwertovsky.helloworld.Operation.Adder.add(), line=20 bci=10 20 ) 메인 인쇄 합계 sum = 2 Adder 클래스에서 계산기로 올라가겠습니다. 그것을 호출한 클래스입니다.
메인 단계 업 > 단계 완료됨: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=10 bci=36 10 for(int i:a) 중단점 제거
메인 클리어 com.qwertovsky.helloworld.Operation.Adder:19 제거됨: 중단점 com.qwertovsky.helloworld.Operation.Adder:19 메인 단계 > 완료된 단계: "thread=main", com.qwertovsky.helloworld.Calculator.sum() , 라인=12 bci=30 12 adder.add(i); 다음 명령을 사용하면 메서드로 들어가는 것을 피할 수 있습니다.
main next > 단계 완료: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=10 bci=36 10 for(int i:a) main next > 단계 완료: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=14 bci=42 14 return adder.getSum(); 표현식의 값을 확인하고 실행을 완료합니다.
main eval adder.getSum() adder.getSum() = 5 main cont > 2+3=5 애플리케이션이 종료되었습니다.

테스트 해보시면 좋을 것 같아요

우리는 JUnit을 사용합니다.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 패키지 com.qwertovsky.helloworld; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collection; org.junit.Test 가져오기; org.junit.runner.RunWith 가져오기; import org.junit.runners.Parameterized.Parameters; @RunWith(value=org.junit.runners.Parameterized.class) 공용 클래스 TestCalculator( int 예상; int arg; @Parameters 공용 정적 컬렉션 매개변수() ( return Arrays.asList(new int( ((4), (2, 2)) ,((-1),(4, -5)) ,((0),(0,0,0) ) ,((0),()) ) ) public TestCalculator(int 예상, int arg) ( this.expected=expected; this.arg=arg; ) @Test public void testSum() ( 계산기 c=new 계산기 () ; 주장Equals(예상,c.sum(arg));
컴파일 중
mkdir test_bin javac -classpath lib/path/junit-4.8.2.jar -sourcepath ./src -d test_bin test/com/qwertovsky/helloworld/TestCalculator.java 실행. ";"는 Windows에서는 클래스 경로의 여러 경로에 대한 구분 기호로 사용되며 Linux에서는 ":"이 사용됩니다. Cygwin 콘솔에서는 두 구분 기호가 모두 작동하지 않습니다. ";"이 작동할 수도 있지만 명령 구분 기호로 처리됩니다.
java -classpath lib/path/junit-4.8.2.jar:./test_bin org.junit.runner.JUnitCore com.qwertovsky.helloworld.TestCalculator JUnit 버전 4.8.2 .... 시간: 0.031 OK(4개 테스트)

라이브러리를 만들어보자

Calculator 클래스는 유용한 것으로 입증되었으며 많은 프로젝트에서 사용할 수 있습니다. Calculator 클래스와 관련된 모든 것을 별도의 프로젝트로 이동해 보겠습니다.
HelloWorld "---bin "---src "---com "---qwertovsky "---helloworld "---HelloWorld.java 계산기 "---bin "---src " "---com " "---qwertovsky " "---계산기" "---Calculator.java " "---작업 " "---Adder.java "---테스트 "---com "---qwertovsky " ---calculator "---TestCalculator.java 또한 다음에서 패키지 이름을 변경합니다. 원본 텍스트. HelloWorld.java에 해당 행을 추가해야 합니다.
com.qwertovsky.calculator.Calculator 가져오기; 컴파일해보자.
cd 계산기 javac -sourcepath src -d bin src/com/qwertovsky/calculator/Calculator.java jar 아카이브 만들기
jar cvf 계산기.jar -C bin . 매니페스트 추가: com/(in = 0) (out= 0)(저장된 0%) 추가: com/qwertovsky/(in = 0) (out= 0)(저장된 0%) 추가: com/qwertovsky/calculator/ (in = 0) (out= 0)(저장된 0%) 추가: com/qwertovsky/calculator/Calculator.class(in = 497) (out= 373)(수축 24%) 추가: com/qwertovsky/calculator/Operation /(in = 0) (out= 0)(stored 0%) 추가: com/qwertovsky/calculator/Operation/Adder.class(in = 441) (out= 299)(deflated 32%) -C 스위치를 사용하여 우리는 bin 디렉토리에서 프로그램을 시작했습니다.

도서관 안에 무엇이 있는지 알아내야 해요

zip unpacker를 사용하여 아카이브의 압축을 풀고 라이브러리에 어떤 클래스가 있는지 확인할 수 있습니다.
모든 클래스에 대한 정보는 javap 디스어셈블러를 사용하여 얻을 수 있습니다.
javap -c -classpath Calculator.jar com.qwertovsky.calculator.Calculator "Calculator.java"에서 컴파일됨 공용 클래스 com.qwertovsky.calculator.Calculator는 java.lang.Object를 확장합니다( public com.qwertovsky.calculator.Calculator(); 코드 : 0: aload_0 1: Invokespecial #1; //메소드 java/lang/Object." ":()V 4: return public int sum(int); 코드: 0: new #2; //class com/qwertovsky/calculator/Operation/Adder 3: dup 4: Invokespecial #3; //메소드 com/qwertovsky /계산기/연산/가산기." ":()V 7: astore_2 8: aload_1 9: astore_3 10: aload_3 11: 배열 길이 12: istore 4 14: Iconst_0 15: istore 5 17: iload 5 19: iload 4 21: if_icmpge 42 24: aload_3 25: iload 5 27: iaload 28: istore 6 30: aload_2 31: iload 6 33: Invokevirtual #4; //메소드 com/qwertovsky/calculator/Operation/Adder.add:(I)V 36: iinc 5, 1 39: goto 17 42 : aload_2 43: Invokevirtual #5; //Method com/qwertovsky/calculator/Operation/Adder.getSum:()I 46: ireturn ) 결과를 보면 클래스에 빈 생성자 외에 다른 합계가 포함되어 있음이 분명합니다. 루프 내에서 Adder 클래스의 add 메소드가 호출되는 메소드입니다. sum 메소드가 완료되면 Adder.getSum()이 호출됩니다.
-c 스위치가 없으면 프로그램은 변수 및 메서드 목록만 생성합니다(-private을 사용하면 모두).
javap -private -classpath Calculator.jar com.qwertovsky.calculator.Operation.Adder "Adder.java"에서 컴파일됨 공용 클래스 com.qwertovsky.calculator.Operation.Adder는 java.lang.Object를 확장합니다( private int sum; public com.qwertovsky .calculator.Operation.Adder(); 공개 com.qwertovsky.calculator.Operation.Adder(int);

라이브러리에 문서를 제공하는 것이 더 좋습니다

이를 위해 계산기 클래스를 변경해 보겠습니다.
문서 작성 가능 다음 명령. 오류가 있으면 프로그램에 목록이 표시됩니다. 가능한 옵션.
mkdir doc javadoc -d doc -charset utf-8 -sourcepath src -author -subpackages com.qwertovsky.calculator 결과는 다음과 같습니다.

jar 아카이브에 서명할 수 있습니다.

라이브러리에 서명해야 하는 경우 전자 서명, keytool 및 jarsigner가 구조에 올 것입니다.
서명을 생성하는 중입니다.
keytool -genkey -keyalg rsa -keysize 2048 -alias qwertokey -keystore path/to/qwerto.keystore 키 저장소 비밀번호 입력: 새 비밀번호 재입력: 이름과 성이 무엇입니까? : Valery Qwertovsky 귀하의 조직 단위 이름은 무엇입니까? : Qwertovsky 귀하의 조직 이름은 무엇입니까? : Qwertovsky 귀하의 도시 또는 지역 이름은 무엇입니까? : Tver 귀하의 주 또는 지방 이름은 무엇입니까? : Tverskaya obl. 두 글자로 된 나라는 무엇입니까? 코드이 유닛? : RU CN=Valery Qwertovsky, OU=Qwertovsky, O=Qwertovsky, L=Tver, ST=Tverskaya obl., C=RU가 맞나요? : y 다음에 대한 키 비밀번호를 입력하세요. (키 저장소 비밀번호와 같으면 RETURN): 새 비밀번호를 다시 입력하세요.
인증서 서명 요청(CSR) 생성
keytool -certreq -file path/to/qwertokey.crt -alias qwertokey -keystore path/to/qwerto.keystore 수신된 파일의 내용이 인증기관으로 전송됩니다. 인증 기관으로부터 인증서를 받습니다. 파일(예: qwertokey.cer)에 저장하고 스토리지로 가져옵니다.
keytool -import -trustcacerts -keystore 경로/to/qwert.keystore -alias qwertokey -file 경로/to/qwertokey.cer jar 아카이브에 서명
jarsigner -keystore path/to/qwerto.keystore Calculator.jar qwertokey qwertokey.cer 파일은 아카이브를 확인하려는 모든 사람에게 전송됩니다. 이렇게 체크됩니다
jarsigner -verify -verbose -certs -keystore 경로/to/qwerto.keystore Calculator.jar

도서관 이용하기

Calculator 라이브러리 클래스를 사용하는 HelloWorld 프로그램이 있습니다. 프로그램을 컴파일하고 실행하려면 라이브러리를 포함해야 합니다.
컴파일 중
cd HelloWorld javac -sourcepath src -d bin -classpath path/to/calculator.jar src/com/qwertovsky/helloworld/HelloWorld.java 실행
java -classpath bin:path/to/calculator.jar com.qwertovsky.helloworld.HelloWorld

프로그램을 하나로 합치기

이것은 다양한 방법으로 수행될 수 있습니다.

첫 번째 방법

cd HelloWorld 에코 메인 클래스: com.qwertovsky.helloworld.HelloWorld>manifest.mf 에코 클래스 경로: lib/calculator.jar >>manifest.mf mkdir lib cp 경로/to/calculator.jar lib/calculator.jar jar - cmf 매니페스트.mf helloworld.jar -C bin . 여기에는 미묘함이 있습니다.
줄을 서서
메인 클래스: com.qwertovsky.helloworld.HelloWorld에는 후행 공백이 없어야 합니다.
두 번째 미묘한 점은 다음 줄에 설명되어 있습니다. 같은 줄에는 다음 줄로 넘어가는 부분이 있어야 합니다. 매니페스트가 타사 아카이버에 의해 보관된 경우입니다.
항아리 프로그램끝에 줄바꿈이 없으면 매니페스트의 마지막 줄은 매니페스트에 포함되지 않습니다.
또 다른 요점: 매니페스트에는 다음이 포함되어서는 안 됩니다. 빈 줄줄 사이. "java.io.IOException: 잘못된 매니페스트 형식" 오류가 발생합니다.

echo 명령을 사용할 때는 메인 클래스 줄 끝의 공백만 주의하면 됩니다.

두 번째 방법

cd HelloWorld 에코 클래스 경로: lib/calculator.jar >manifest.mf mkdir lib cp 경로/to/calculator.jar lib/calculator.jar jar -cmef 매니페스트.mf com.qwertovsky.helloworld.HelloWorld helloworld.jar -C bin . 안에 이 방법메인 클래스의 공백 오류를 방지합니다.

세 번째 방법

cd HelloWorld mkdir lib cd lib jar -xvf 경로/to/calculator.jar com/ 생성됨: com/ 생성됨: com/qwertovsky/ 생성됨: com/qwertovsky/calculator/ 팽창됨: com/qwertovsky/calculator/Calculator.class 생성됨: com /qwertovsky/calculator/Operation/ 팽창됨: com/qwertovsky/calculator/Operation/Adder.class cd .. cp -r bin/* lib/ jar -cef com.qwertovsky.helloworld.HelloWorld helloworld.jar -C lib . rm -r lib 실행파일에 필요한 라이브러리의 코드를 포함시켰습니다.

실행 가능한 jar 파일 실행

Calculator.jar 파일은 실행 가능하지 않습니다. 그러나 helloworld.jar은 시작할 수 있습니다.
처음 두 가지 방법을 사용하여 아카이브를 생성한 경우 동일한 디렉터리의 아카이브 옆에 Calculator.jar 파일이 있는 lib 폴더가 있어야 합니다. 이러한 제한은 매니페스트의 클래스 경로가 실행 파일과 관련된 경로를 지정한다는 사실 때문입니다.
cd 계산기 ls ../HelloWorld/lib Calculator.jar java -jar ../HelloWorld/helloworld.jar 세 번째 방법을 사용하는 경우 필수 라이브러리실행 파일에 포함되어 있습니다. 필요한 라이브러리를 근처에 둘 필요가 없습니다. 같은 방식으로 시작됩니다.
자바 -jar ../HelloWorld/helloworld.jar

JavaEE 애플리케이션으로 수행할 작업

비슷하게. 사용되는 애플리케이션 서버에서는 컴파일용 라이브러리만 가져와야 합니다. JBoss를 사용하는 경우 서블릿을 컴파일하려면 다음과 같은 작업을 수행해야 합니다.
javac -classpath 경로/to/jboss/common/lib/jboss-servlet*.jar -d ./classes src/com/qwertovsky/app/servlets/MenuSt.java
JavaEE 애플리케이션의 아카이브 구조는 특정 형식을 따라야 합니다. 예를 들어
my.ear `---META-INF | `---manifest.mf `---lib | `---mylib.jar `---my.war | `---메타-INF | | `---매니페스트.mf | `---WEB-INF | | `---lib | | | `---myweblib.jar | | ``---수업 | | | ``---com | | | `---... | | `---web.xml | `---index.html | `---<остальное веб-содержимое (страницы, изображения)>``---myejb.jar
명령줄을 사용하여 서버 자체에서 애플리케이션을 실행하는 방법은 서버마다 다릅니다.

이 기사가 명령줄에서 Java를 사용하여 작업하는 누군가를 위한 치트 시트가 되기를 바랍니다. 이러한 기술은 Ant 스크립트의 내용과 의미를 이해하고 "어떤 IDE를 가장 좋아합니까?"보다 더 까다로운 인터뷰 질문에 답하는 데 도움이 될 것입니다.



질문이 있으신가요?

오타 신고

편집자에게 전송될 텍스트: