날짜별 글 목록: 2008년 2월 10일

java 명령어의 옵션 정리

자바프로그램(Java Application)을 실행시켜 주는 명령어이다.



사용법:java <options> <classfiles> <argument> 또는
         java <options> -jar file.jar <argument>

options: 옵션
classfiles: 호출될 클래스 파일 이름
file.jar: 호출될 jar파일 이름
argument:main함수에 파라미터로 보내질 문자열



예를들어, main함수를 포함하는 Hello.class 파일이 존재할경우,
java Hello 로 프로그램을 실행시킬수 있는데, 확장자인 class는 생략할수 있지만,
대소문자는 구별하므로, 정확하게 기입해야 한다.
java Hello Greeting 처럼 Greeting을 덧붙일경우, main함수에 문자열인자로 Greeting을 보낼수 있다.



a) -client:
자바 HotSpot Client VM을 선택한다. (디폴트 값이다)



b) -server:
자바 HotSpot Server VM을 선택한다.



c) -classpath (-cp):
참조할 클래스 파일 패스를 지정하는데, jar파일, zip파일, 클래스파일의 디렉터리 위치를 기술한다.
각 클래스파일 패스는 콜론(:)을 통해서, 분리시켜 기술한다
자바VM은  자바프로그램을 로딩시, -classpath로 지정된 클래스 패스나, java플래폼이 설치된, 운영체제에서의
환경변수로 지정된, 클래스패스를 통해서, 클래스 파일들을 참조하게 된다.



d) -D <property name>=<property value>:
시스템의 property 값을 설정한다.


ex) java -Djava.library.path=. HelloWorld


자바의 시스템 property(속성)중 “java.library.path”값을 “.” (현재디렉터리)로 지정해서, HelloWorld 실행시켜라는 의미 이다.


위와같이 자바VM에 지정된 속성을 실행시 -D옵션을 사용해서, 변경, 지정할수 있다.



e) -jar 파일이름:


jar파일로 압축되어져 있는 자바 프로그램을 실행시킨다.


클래스 파일이름 대신 jar파일을 사용해서, 압축되어져 있는 자바 프로그램을 실행시킬수 있는데, 위프로그램이 제대로 실행되어지기 위해서, Jar파일안의 manifest라는 텍스트 파일에 Main-Class:classname 같은 형태의 텍스트 라인이 포함되어 있어야 한다.


그리고, 여기에 기술된 classname은 main함수를 포함하고 있는 클래스 이름이 되어야 한다.



f) -verbose:


자바프로그램 실행되어지는 정보를 화면에 출력해준다.


-verbose:class


로딩되어지는 각클래스들의 정보를 화면에 출력한다.


-verbose:gc


garbage collection 이벤트를 화면에 출력한다.


-verbose:jni


native 함수들과 다른 자바 native 인터페이스 사용에 대한 정보를 출력한다



g) -version:


현재 JVM의 버젼 정보만 출력한다



h) -showversion:


현재 JVM의 버젼정보를 출력한다.


java -showversion HelloWolrd


와 같이 자바 프로그램을 실행시키면서, 자바 버젼정보를 출력할수 있다.



i) -X


비표준 자바옵션 리스트를 화면에 출력해준다.



i-1) -Xms, -Xmx


자바를 구동시, JVM이 사용가능한 최대 메모리 사이즈를 변경합니다.


JVM이 자바프로그램을 구동하기 위해, 초기설정된 메모리사이즈는 64M입니다.


사용방법은 다음과 같습니다


java -Xms <초기힙사이즈> -Xmx <최대힙사이즈>


예를들어, Hello.class 자바 프로그램을 시작시, 256M(메가)의 힙사이즈를 할당하며, 최대 512M의 힙사이즈를 할당받고 싶다면,  다음과같이 합니다.


java -Xms256m -Xmx512m Hello

javac 명령어의 옵션 정리

javac – 자바컴파일러로써, 자바코드를 작성한 소스파일(.java)을 자바 가상머신이 인식할수 있는 바이트 코드(.class) 타입으로 변환시켜주는 명령어 입니다.

사용법: javac <options> <souce files>
예를들어, Hello.java, Greeting.java 두개의 파일이 존재한다면,
javac Hello.java Greeting.java
javac *.java (*을 사용해서, 모든 확장자가 .java인 파일을 컴파일할수 있다.)

1) 옵션:


a) -classpath:
-classpath(cp) path(파일 절대 경로):
컴파일러가 컴파일 하기 위해서 필요로 하는 참조할 클래스 파일들을 찾기 위해서 컴파일시 파일 경로를 지정해주는옵션.

예를 들어,  Hello.java파일이 C:\Java 디렉터리에 존재하고, 필요한 클래스 파일들이 C:\Java\Engclasses에 위치한다면, javac -classpath C:\Java\Engclasses C:\Java\Hello.java 로 해주면 된다.

만약 참조할 클래스 파일들이 C:\Java\Engclasses외의 다른 디렉터리에도 존재한다면, C:\Java\Korclasses 일경우, javac -classpath C:\Java\Engclasses;C;\Java\Korclasses C:\Java\Hello.java

그리고, 현재 디렉토리역시 포함하고 싶다면, javac -classpath .;C:\Java\Engclasses;C;\Java\Korclasses C:\Java\Hello.java 기본적으로, dos에서는 .는 현재 디렉터리를 의미하고, ..는 현재 디렉터리의 상위디렉터리를 의미한다.

또한 classpath 대신 단축어인 cp를 사용해도 된다.
javac -cp C:\Java\Engclasses C:\Java\Hello.java

b) -d:
-d directory
클래스 파일을 생성할 루트 디렉터리를 지정합니다.
기본적으로 컴파일러는 -d옵션을 주지 않으면, 소스파일이 위치한 디렉터리에 클래스 파일을 생성시킵니다.
예를 들어,  Hello.java파일이 C:\Java 디렉터리에 존재하고 클래스 파일의 루트디렉터리를 C:\Java\Classfiles라고 하면,
javac -d C:\Java\Classfiles C:\Java\Hello.java 입니다.


만약 -d 옵션을 사용하려고 하는데, 루트디렉터리(위예에서는 C:\Java\Classfiles) 가 존재 하지 않는다면,
“The system cannot find the path specified”라는 에러 메시지를 보게 됩니다.
현재 작업 디렉터리가 C:\Java\Classfiles 에 위치하면,
javac -d .\Classfiles Hello.java 와 같이 상대 디렉터리로 표현할수 있습니다.


c) -encoding:
-encoding encoding name
소스 파일에 사용된 문자열 인코딩을 설정합니다.
만약 위옵션이 설정되어 있지 않으면, 플래폼의 기본적인 컨버터가 사용되어 집니다.


d) -g:
모든 디버깅 정보를 생성시킵니다.
만약 위옵션이 설정되어 있지 않으면, 기본적으로, 라인넘버만 생성시킵니다.
-g:none: 디버깅 정보를 전혀 생성 시키지 않습니다.
-g:{lines, vars, source}:
위처럼 명시적으로, 몇몇 디버깅 정보를 생성시킬수 있습니다.
lines은 라인정보, vars는 지역변수, sounce는 소스 파일 정보를 나타냅니다.


e) -nowarn:


경고 메시지 (warning message)를 생성시키지 않습니다.


f) -verbose:


컴파일러와 링커가 현재 어느 소스파일이 컴파일되고 있고, 어느 파일이 링크되고 있는지
그정보를 출력한다.


h) -deprecation:


소스 코드내에서, 사용되어진 deprecated API의 위치 를 출력 합니다.


ex)
C:\Java> javac World.java
Note: World.java uses a deprecated API. Recompile with “-deprecation” for details
.
1 warning
C:\Java> javac -deprecation World.java
World.java:52: Note: The method java.awt.Dimension size() in class java.awt.Compon
ent has been deprecated.
Dimension d = size();


Note: World.java uses a deprecated API. Please consult the documentation for a be
tter alternative.


i) -sourcepath:


-sourcepath 소스패스


소스파일의 위치를 지정합니다.


j) -target:


-target 자바버젼


지정된 자바버젼의 VM에서 작동 되어지도록 클래스파일을 생성 시킵니다.


1.1
jvm 1.1 버젼에서 호환되어질수 있는 클래스 파일생성
1.2
jvm 1.2 버젼에서 호환되어질수 있는 클래스 파일생성
1.3
jvm 1.3 버젼에서 호환되어질수 있는 클래스 파일 생성


ex)
javac -target 1.2 Helloworld.java


k) -bootclasspath 패스:


특정한 bootstrap또는 확장 클래스를 지정할수 있다.
기본적으로, 자바컴파일러는 javac(컴파일러명령)이 설치된 플래폼의 bootstrap과 확장클래스들을 통해서, 컴파일작업을 수행하지만, bootclasspath 옵션을 사용하면, cross-compiling이라고 해서, 다른 자바플래폼의 bootstrap과 확장클래스들을 통해서, 컴파일 할수 있는 기능을 지원한다.

예를들어,
javac -target 1.1 -bootclasspath jdk1.1.7/lib/classes.zip -extdirs “” OldCode.java
컴파일러에게 현재 자신의 bootstrap을 사용하지 말고, jdk1.1.7/lib/classes.zip bootstrap클래스들을 사용해서 컴파일 하라고 명령하는것이다.

참고로, 모바일자바에서, 모바일폰에 설정된, jvm에 맞도록, 소스코드를 컴파일하기 위해서, 주로 사용되어지는 옵션이다.


l) -extdirs 디렉터리:
특정한, 확장 디렉토리를 지정한다.cross-compiling시 주로, 사용되어지는 옵션이면, 각디렉터리들은 콜론(:)에 의해서, 분리되어진다.
컴파일시, 기술한 디렉터리의 클래스 파일을 참조한다.

jar / war / ear 에 대해서..

jar는 java archive.
war는 web archive.
ear는 enterprise archive..

보통 jar파일에는 class파일이 들어가고 java소스가 포함되거나 xml,META정보가 포함됩니다.
war파일은 class와 jar,xml,html,jsp,js,css 파일등 web application관련 파일들이 포함됩니다.
ear파일은 통상 jar,war가 포함되며 컨테이너와 벤더에 따른 배포를 위한 xml파일이 포함됩니다.

class < jar < war < ear 의 개념입니다.

보 통 개발시에는 war나 ear 따위의 패키징을 하지 않고 class나 jar단위로 개발하며, 운영시의 적용과 배포를 위해 패키징 합니다. 제우스에 포함된 ear파일도 제우스컨테이너의 운영을 위한 로직이 포함된 ear이거나 샘플 등이 들어있는 패키지일 것 같습니다.