Linux_Ubuntu

[Linux] 리눅스에서 쉘스크립트(.sh)로 Java 프로젝트 실행하는 방법

15호의 개발자 2021. 12. 17. 10:32
반응형

Linux에서 쉘스크립트 파일(.sh)로 Java 프로젝트 실행하는 방법

 


 

1. 리눅스에 자바를 설치한다.

 

아래 링크를 참고하여 리눅스에 자바를 설치한다.

 

[Linux] 우분투 터미널로 Java 설치 (환경변수 설정 /etc/profile, ~/.bashrc)

[Linux] 우분투에 자바 설치 (환경변수 설정 /etc/profile, ~/.bashrc) 1. 설치 전 최신 버전으로 업데이트 $ sudo apt-get update $ sudo apt-get upgrade 2. java 설치 $ sudo apt-get install openjdk-11-jdk..

unit-15.tistory.com

 

 

 

2. 자바 프로젝트 폴더를 리눅스에 옮긴다.

 

나의 경우 디렉터리 구조는 위와 같았다. test-project 하위에 lib폴더, src폴더와 기타 out, .idea폴더가 위치해있었다. lib 폴더에는 외부 라이브러리인 jar 파일을 여러 개 넣었으며, src 파일에 java 파일이 3개 있었다. 윈도우에 위치한 test-project 디렉터리를 zip파일로 압축하여 우분투 로컬로 보냈으며, unzip test-ptoject.zip 명령어를 통해 압축을 풀어 사용했다.

 

 

 

3. 쉘 스크립트 파일(.sh)을 작성한다.

 

쉘 스크립트 파일을 실행함으로써 자바 프로젝트가 자동으로 작동되도록 해보자. 아래와 같이 작성하면 잘 동작한다. 

 

<test-pj.sh>

#!/bin/bash

# 이 파일은 test-project를 자동으로 실행시키는 쉘스크립트 파일이다.
# 전역 설정 방법: 본 파일을 PATH 경로에 위치시키거나, ~/.bashrc를 수정하여 추가하면 된다.

# test-project 디렉터리가 위치한 경로
# ROOT_PATH는 사용자 환경에 따라 다름
ROOT_PATH=/home/test-project

# 디렉터리 이동
cd $ROOT_PATH
cd src

# compile (lib 폴더 하위에 있는 외부 라이브러리)
javac -cp ".:$ROOT_PATH/lib/*" TestProject.java

# java 실행
java -cp ".:$ROOT_PATH/lib/*" TestProject

if [ $? -eq 0 ]
then
    echo "compile worked!"
else
    echo "compile failed..."
fi

최종 쉘 스크립트 파일은 위와 같으며, 한 줄 한 줄 자세한 설명은 아래에 적었다.


<test-pj.sh>에 대한 자세한 설명

#!/bin/bash

└ 스크립트 파일이 bash 쉘로 실행시킨다는 의미이다. 쉘의 종류로는 bash 말고도 tcsh 쉘 등 여러 개가 있으므로 이를 특정해주는 것이다. 보통 쉘스크립트에서 #는 주석을 의미하지만, #!/bin/bash는 주석 처리를 한 것이 아니므로 맨 윗줄에 이를 꼭 추가해주어야한다.

 

# 전역 설정 방법: 본 파일을 PATH 경로에 위치시키거나, ~/.bashrc를 수정하여 추가하면 된다.

└ test-pj.sh 스크립트 파일을 전역으로 설정함으로써 현재 경로가 어디든 sh test-pj.sh 명령어를 통해 실행시킬 수 있다. 그러기 위해서는 1) test-pj.sh 파일을 PATH 경로에 위치시키거나, 2) ~/.bashrc에 환경변수 선언을 해주면 된다.

 

<쉘 스크립트 파일 global 설정 방법>

1) 
test-pj.sh 파일을 PATH 경로에 위치시키기

$ echo $PATH
위의 명령어로 PATH를 확인한 후, 해당 위치에 test-pj.sh 파일을 넣어 놓는다. (ex. /usr/local/bin 등)


2) ~/.bashrc에 환경변수 선언하기

$ vi ~/.bashrc
위의 명령어로 ~/.bahrc 파일을 열고 아래의 명령어를 추가하여 PATH를 지정해둔다.
export PATH=/home/test-project:$PATH
(/home/test-project는 test-pj.sj가 위치한 경로이다.)

 

 

# test-project 디렉터리가 위치한 경로
# ROOT_PATH는 사용자 환경에 따라 다름
ROOT_PATH=/home/test-project

└ test-project 디렉터리가 위치한 경로는 사용자의 리눅스 로컬 환경마다 다르므로 본인의 환경에 맞게 직접 설정하면 된다.

 

 

# 디렉터리 이동
cd $ROOT_PATH
cd src

└ java 컴파일 및 실행을 하기 위해 소스 파일이 위치한 경로로 이동한다. src 폴더 하위에 java 파일을 위치해두었으므로 src로 이동한다.

 

 

# compile (lib 폴더 하위에 있는 외부 라이브러리)
javac -cp ".:$ROOT_PATH/lib/*" TestProject.java

└ javac 명령어로 컴파일을 한다. 컴파일 할 파일이 여러 개인 경우, main 메서드가 있는 파일만 컴파일하여도 맞물려 있는 다른 자바 파일들도 자동으로 컴파일된다. (javac 명령으로 컴파일하면 .class 파일이 자동으로 생성된다.)

 

나의 경우에는 src 폴더 하위에 java 파일 3개가 있었다. TestProject.java, TestProjectSub1.java, TestProjectSub2.java가 있었는데 TestProjectSub1~2 파일은 TesetProject에 맞물려 있는 파일이었다. 이 경우 TestProject 파일만 컴파일 하여도 자동으로 TestProjectSub1~2 파일들도 컴파일 되었다. 그렇기 때문에 TestProject.java만 컴파일 한 것이다.

 

 

# java 실행
java -cp ".:$ROOT_PATH/lib/*" TestProject

└ java 파일을 실행한다.

 

처음에는 NoClassDefFoundError 에러가 뜨면서 실행이 되지 않았었는데, $ROOT_PATH/lib/* 이 경로를 추가해주니 에러 없이 잘 실행이 되었다. 관련 내용은 아래 링크에 자세히 나와있으니 참고하면 된다.

 

[에러해결] Linux에서 Java 실행 시 NoClassDefFoundError

[에러해결] Linux에서 Java 실행 시 NoClassDefFoundError 에러 메시지 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/WorkbookFactory at TestClass.main(TestClass...

unit-15.tistory.com

 

 

(선택사항)

if [ $? -eq 0 ]
then
    echo "compile worked!"
else
    echo "compile failed..."
fi

└ 이 코드는 선택사항이다. 컴파일이 성공적으로 완료된 경우 "compile worked!"를 반환하며, 실패한 경우에는 "compile failed..."를 반환한다. 해당 내용은 아래 링크에 자세히 적어놓았다.

 

 

[Linux] 셸스크립트/Bash 유용한 문법 모음($?, if/else문, try/catch문?)

[Linux] 쉘스크립트/Bash 유용한 문법 모음($?, if/else문, try/catch문?) $? 리눅스에서는 변수 앞에 $가 들어간다. 환경변수를 확인할 때 echo $PATH 등의 명령어를 자주 사용하는데, 이는 환경변수 또한

unit-15.tistory.com

 

 

 

 4. 셸 스크립트 파일을 실행하기 위해 파일 권한을 변경한다.

 

$ chmod +x test-pj.sh

chmmod 명령어로 .sh 파일의 실행 권한을 추가해준다. 이를 진행하지 않으면 Permission denied가 뜬다.

(ls -al | grep test-pj.sh 명령으로 실행 권한(x)이 정상적으로 추가됐는지 확인할 수 있다.)

 

 

 

5. 셸 스크립트 파일을 실행해본다.

 

위의 과정을 잘 따라왔다면 셸스크립트 파일이 정상적으로 실행될 것이다. 실행 명령어는 운영체제마다 조금씩 다르다.

$ test-pj.sh

 

자바 프로젝트가 정상적으로 컴파일-실행됨을 확인할 수 있다.

 

 

 

 

 


 

 

javac와 java의 차이는 아래 링크 참고

https://unit-15.tistory.com/170

 

 

 

반응형