Wednesday, November 15, 2006
Java/자바] 소스 컴파일 + 실행하기, 자동 배치파일(BAT)
jv.bat 이라는 배치파일로, 도스창(명령 프롬프트; cmd.exe)에서, 자바 소스의 컴파일과 실행을 동시에 할 수 있습니다.
자바를 커맨드라인에서 컴파일하고 실행하려면, 확장자를 붙이고 떼고 참 번거롭습니다. 그래서 이런 배치 파일을 만들었습니다.
파일명: jv.bat
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
jv MyTest
라고 하면, MyTest.java 라는 파일을 컴파일하고 에러가 없을 경우에는 곧바로 실행합니다. (jv MyTest.java 라고 확장자를 붙여도, 확장자를 자동으로 처리합니다.)
만약 MyTest 라는 프로그램이 "실행시 옵션"을 필요로 한다면
jv MyTest 111 222 333
이런 식으로 하면 됩니다. (▶▶ Java/자바] main()의 String args[] 배열 용도, 사용법 예제 참고)
그냥 jv 라고 치면, 기본값으로 Foo.java 라는 파일을 컴파일하고 실행합니다. Foo.java 라는 파일이 현재 디렉토리에 없다면, 도움말을 출력합니다. 다만, Foo 라는 프로그램이 "실행시 옵션"을 필요로 한다면
jv Foo 111 222 333
이렇게 파일명까지 입력해 주어야 합니다.
jv -h
라고 하면 항상 도움말이 출력됩니다.
그 외에 기타 잡다한 기능도 있습니다.
블로거 에러 때문에, 3시간 전에 올린 포스트가 지금에야 블로그에 나타났습니다.
자바를 커맨드라인에서 컴파일하고 실행하려면, 확장자를 붙이고 떼고 참 번거롭습니다. 그래서 이런 배치 파일을 만들었습니다.
자바 소스 컴파일한 후, 자동 실행하는 배치파일(BAT)
파일명: jv.bat
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
@echo off
setlocal
:: 상수 정의
set JAVA_CLASS_LIB=D:\myhome\java
:: 옵션 해석 (대소문자 구분함)
if "%1" == "-h" goto HELP
if "%1" == "-help" goto HELP
if "%1" == "--help" goto HELP
if "%1" == "-cc" goto CLASS_COMPILE
if "%1" == "-foo" goto FOO
if "%1" == "" (
if not exist Foo.java goto HELP
set FILE_NAME=Foo
) else (
set FILE_NAME=%~n1
)
:: 컴파일
javac %FILE_NAME%.java
:: 컴파일 때 에러 있으면 종료
if not "%ERRORLEVEL%" == "0" (
echo jv.bat: ERROR!
goto :EOF
)
:: 컴파일된 자바 프로그램을 실행
:: 자바 프로그램에 최대 10개의 파라미터만 지정 가능한 한계 있음
shift
shift
java %FILE_NAME% %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto QUIT
:HELP
echo.
echo ........................................................................
echo [자바 소스 컴파일과 실행을 동시에 하는 배치 파일]
echo https://mwultong.blogspot.com/
echo ........................................................................
echo.
echo 사용법: jv ^<자바 소스 파일명^>
echo 예 제: jv MyTest
echo.
echo 파일명의 대소문자를 구분함. 확장자는 붙이지 않아도 됨
echo.
echo 만약 파일명을 지정하지 않으면 기본값으로, Foo.java 를 컴파일
echo Foo.java 가 '현재 디렉토리'에 없으면, 이 도움말이 출력됨
echo.
echo.
echo.
echo 옵션 (대소문자 구분):
echo.
echo -cc : 클래스 라이브러리를 컴파일/재컴파일
echo -foo : 테스트용으로 사용할 Foo.java 파일을 자동으로 생성.
echo 예제: jv -foo
echo.
echo ........................................................................
echo.
goto QUIT
:: 테스트용으로 사용할 Foo.java 파일을 자동으로 만들기
:FOO
if not exist Foo.java goto FOO_MAKE
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:LOOP
set /p YN=Foo.java already exist. overwrite (Y/N)?
if /i "%YN%" == "y" goto FOO_MAKE
if /i "%YN%" == "n" goto :EOF
goto LOOP
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:FOO_MAKE
echo public class Foo {> Foo.java
echo public static void main(String[] args) {>> Foo.java
echo System.out.println("테스트");>> Foo.java
echo }>> Foo.java
echo }>> Foo.java
echo.>> Foo.java
goto QUIT
:: 클래스 라이브러리를 컴파일/재컴파일
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:CLASS_COMPILE
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
cd /d %JAVA_CLASS_LIB%
javac -verbose *.java
if not "%ERRORLEVEL%" == "0" (
echo jv.bat: LIB COMPILE ERROR!
goto :EOF
)
goto QUIT
:QUIT
rem 자바 소스 "파일명"과 같은 파일이 소문자로 현재 디렉토리에 있으면 에러가 나는 한계
rem jv Foo 로 실행할 때, Foo.java 외에, foo 라는 파일이 있으면
rem %~n1 에, 대문자가 아닌 소문자로 foo 가 입력되어 에러
setlocal
:: 상수 정의
set JAVA_CLASS_LIB=D:\myhome\java
:: 옵션 해석 (대소문자 구분함)
if "%1" == "-h" goto HELP
if "%1" == "-help" goto HELP
if "%1" == "--help" goto HELP
if "%1" == "-cc" goto CLASS_COMPILE
if "%1" == "-foo" goto FOO
if "%1" == "" (
if not exist Foo.java goto HELP
set FILE_NAME=Foo
) else (
set FILE_NAME=%~n1
)
:: 컴파일
javac %FILE_NAME%.java
:: 컴파일 때 에러 있으면 종료
if not "%ERRORLEVEL%" == "0" (
echo jv.bat: ERROR!
goto :EOF
)
:: 컴파일된 자바 프로그램을 실행
:: 자바 프로그램에 최대 10개의 파라미터만 지정 가능한 한계 있음
shift
shift
java %FILE_NAME% %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto QUIT
:HELP
echo.
echo ........................................................................
echo [자바 소스 컴파일과 실행을 동시에 하는 배치 파일]
echo https://mwultong.blogspot.com/
echo ........................................................................
echo.
echo 사용법: jv ^<자바 소스 파일명^>
echo 예 제: jv MyTest
echo.
echo 파일명의 대소문자를 구분함. 확장자는 붙이지 않아도 됨
echo.
echo 만약 파일명을 지정하지 않으면 기본값으로, Foo.java 를 컴파일
echo Foo.java 가 '현재 디렉토리'에 없으면, 이 도움말이 출력됨
echo.
echo.
echo.
echo 옵션 (대소문자 구분):
echo.
echo -cc : 클래스 라이브러리를 컴파일/재컴파일
echo -foo : 테스트용으로 사용할 Foo.java 파일을 자동으로 생성.
echo 예제: jv -foo
echo.
echo ........................................................................
echo.
goto QUIT
:: 테스트용으로 사용할 Foo.java 파일을 자동으로 만들기
:FOO
if not exist Foo.java goto FOO_MAKE
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:LOOP
set /p YN=Foo.java already exist. overwrite (Y/N)?
if /i "%YN%" == "y" goto FOO_MAKE
if /i "%YN%" == "n" goto :EOF
goto LOOP
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:FOO_MAKE
echo public class Foo {> Foo.java
echo public static void main(String[] args) {>> Foo.java
echo System.out.println("테스트");>> Foo.java
echo }>> Foo.java
echo }>> Foo.java
echo.>> Foo.java
goto QUIT
:: 클래스 라이브러리를 컴파일/재컴파일
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:CLASS_COMPILE
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
cd /d %JAVA_CLASS_LIB%
javac -verbose *.java
if not "%ERRORLEVEL%" == "0" (
echo jv.bat: LIB COMPILE ERROR!
goto :EOF
)
goto QUIT
:QUIT
rem 자바 소스 "파일명"과 같은 파일이 소문자로 현재 디렉토리에 있으면 에러가 나는 한계
rem jv Foo 로 실행할 때, Foo.java 외에, foo 라는 파일이 있으면
rem %~n1 에, 대문자가 아닌 소문자로 foo 가 입력되어 에러
위의 배치파일 사용법
jv MyTest
라고 하면, MyTest.java 라는 파일을 컴파일하고 에러가 없을 경우에는 곧바로 실행합니다. (jv MyTest.java 라고 확장자를 붙여도, 확장자를 자동으로 처리합니다.)
만약 MyTest 라는 프로그램이 "실행시 옵션"을 필요로 한다면
jv MyTest 111 222 333
이런 식으로 하면 됩니다. (▶▶ Java/자바] main()의 String args[] 배열 용도, 사용법 예제 참고)
그냥 jv 라고 치면, 기본값으로 Foo.java 라는 파일을 컴파일하고 실행합니다. Foo.java 라는 파일이 현재 디렉토리에 없다면, 도움말을 출력합니다. 다만, Foo 라는 프로그램이 "실행시 옵션"을 필요로 한다면
jv Foo 111 222 333
이렇게 파일명까지 입력해 주어야 합니다.
jv -h
라고 하면 항상 도움말이 출력됩니다.
그 외에 기타 잡다한 기능도 있습니다.
블로거 에러 때문에, 3시간 전에 올린 포스트가 지금에야 블로그에 나타났습니다.
tag: java
자바 | Java
tag: batch
배치파일 | DOS CMD BATCH .BAT | VBScript .VBS
<< Home