Notice
                              
                          
                        
                          
                          
                            Recent Posts
                            
                        
                          
                          
                            Recent Comments
                            
                        
                          
                          
                            Link
                            
                        
                    passion and relax
[JAVA] 17. 코드를 배포합시다 (패키지 제작과 배포) 본문
애플리케이션 배포 종류
로컬
. 애플리케이션 전체가 최종 사용자의 컴퓨터에서 실행 가능한 JAR(Java ARchive)로 배포
. 독립적인 프로그램
. 예) GUI 프로그램인 경우가 많다.
로컬 - 원격 혼합형
. 서버와 클라이언트로 나뉘어 처리
. 예) 웹스타트, RMI 애플리케이션
원격
. 애플리케이션 전체가 서버에서 돌고, 클라이언트는 non-자바인 경우
. 예) 웹 애플리케이션
로컬 : 컴파일 및 실행
소스코드가 저장될 위치와 클래스 파일이 컴파일 되어 저장될 위치를 분리 시켜야 한다.
. 컴파일된 class 파일을 ../classes 디렉토리에 저장하라
javac -d ../classes *.java
실행
. main이 있는 클래스명을 지정해 준다.
java MyProject/classes/클래스명
로컬 : 실행 가능한 JAR 만들기
클래스 파일이 모두 classes 디렉토리에 있는지 확인
main()이 어디 있는지를 minifest.txt 파일에 기록하고, 이 파일을 classes 디렉토리에 생성
Main-Class: MyApp (엔터) => 확장자 .class 가 없다. 마지막에 엔터를 넣어라
jar 명령어를 이용하여 JAR 파일 생성
classes 디렉토리로 이동
jar -cvmf manifest.txt app1.jar *.class
또는
jar -cvmf manifest.txt app1.jar MyApp.class
로컬 : JAR 실행 시키기
java -jar app1.jar
또는 OS에 따라 더블클릭만 해도 되기도 한다.
로컬 : 클래스를 패키지에 넣기
유사한 성격의 클래스들 끼리 그룹화 하기 위함
이름 충돌을 막기 위함
역 도메인명을 포함하여 패키지를 구조화 하는 것을 sun에서 추천하고 있음.
각 클래스들의 첫 줄에 패키지를 넣어야 한다. package com.headfirstjava;
역 도메인명의 구조에 따라, 디렉토리 구조를 줘야 한다. 그 위치에 클래스 소스가 있어야 한다.
로컬 : 패키지의 컴파일과 실행
cd MyProject/source
소스가 담긴 최상위 디렉토리인 source 에서 컴파일 해야 한다.
javac -d ../classes com/headfirstjava/*.java
-d : 컴파일된 클래스 파일을 패키지 구조에 맞게 ../classes 하위에 올바르게 저장하라는 플래그
cd MyProject/classes
실행도 classes 에서 해야 한다.
java com.headfirstjava.PackageExercise
패키지명이 포함된 클래스의 전체 이름을 적어야 한다.
로컬 : 패키지를 가지고 실행 가능한 JAR 만들기
1. 클래스 파일이 classes 하위에 제대로된 패키지 구조로 저장되어 있는지 확인
2. classes 디렉토리에 manifest.txt 작성
Main-Class: com.headfirstjava.PackageExercise (엔터)
3. jar 도구로 JAR 파일 생성
cd MyProject/classes
jar -cvmf manifest.txt packEx.jar com //com만 지정해야 함.
4. 실행
java -jar packEx.jar
로컬 : jar 도구 더 활용
jar -tf packEx.jar
-tf : Table File의 의미로 JAR 안에 있는 목록을 출력 시키라는 태그
jar -xf packEx.jar
-xf : Extract File의 의미로 묶인 것을 풀라는 태그
로컬 : MANIFEST.MF
1. classes에 manifest.txt 작성
2. jar -cvmf manifest.txt packEx.jar com 실행
3. jar 도구가 알아서 META-INF 디렉토리에 minifest.txt를 가지고 MANIFEST.MF를 만든다.
JWS : 자바 웹 스타트 (Java Web Start)
사용자가 웹을 통해 내려 받을 수 있는 로컬로 실행 가능한 파일
작동 원리
. 클라이언트에서 요청
<a href = "MyApp.jnlp">클릭</a>
. 서버에서
jnlp 전송 (jnlp : 애플리케이션의 실행 가능한 JAR의 이름을 지정해 주는 XML 문서)
. 클라이언트에서
JWS 실행 (클릭 되면서 자동으로 시작 된다)
전송 받은 jnlp 읽기
서버에 MyApp.jar
. 서버에서
MyApp.jar
. 클라이언트에서
JWS가 JAR의 main() 실행
. 이후, 인터넷 없이도 JWS 실행으로 JAR를 시작할 수 있다.
JWS : jnlp 파일
jnlp : Java Network Launch Protocol = 자바 네트워크 구동 규약
JWS에서 읽혀져 JAR 파일을 찾아내고, main()을 실행하여 App를 시작하는 용도로 쓰이는 파일
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="0.2.1.0" codebase="http://127.0.0.1/~kathy" href="MyApp.jnlp">
    <information>
        <title>kathy App</title>
        <vendor>Wickedly Smart</vendor>
        <homepage href="index.html/>
        <description>Head First WebStart demo</description>
        <icon href="kathys.gif"/>
        <offline-allowed/>
    </information>
    <resources>
        <j2se version="1.3+"/>
        <jar href="MyApp.jar"/>     <====== 확인
    </resources>
    <application-desc main-class="HelloWebStart"/>        <======= 확인
</jnlp>
JWS : 배포하는 방법
1. JAR를 만든다
2. jnlp를 만든다
3. JAR, jnlp를 웹서버에 저장한다.
4. 웹 서버에 jnlp 다운로드를 위한 mime 유형을 추가한다.
application/x-java-jnlp-file
5. 링크 만들기
<a href="MyApp.jnlp">haha</a>
'프로그래밍' 카테고리의 다른 글
| [JAVA] 19. 거의 본문에 들어갈 뻔 했던 내용 (1) | 2024.06.05 | 
|---|---|
| [JAVA] 18. 분산 컴퓨팅 (RMI와 서블릿, EJB와 지니) (2) | 2024.06.04 | 
| [JAVA] 16. 자료구조 (컬렉션 및 제네릭) (1) | 2024.06.04 | 
| [JAVA] 15. 연결하는 방법 (네트워크 소켓과 멀티스레딩) (0) | 2024.06.04 | 
| [JAVA] 14. 객체 저장 (직렬화와 입출력) (0) | 2024.06.03 |