2022-05-01 터미널에서 java 작성, 컴파일, 실행하기

2022. 5. 2. 00:20BE/Linux

java를 잠깐 사용할 일이 생겼다.

 

2학년 java 강의에선 당연히 이클립스를 사용했다.

 

하지만 짧게 사용하는데 이클립스를 설치하기는 싫었다.

 

그래서 vim과 터미널을 이용해서 java를 컴파일하고 실행하는 방법을 찾아보았다.


Java Compiler, Java Virtual Machine

 

java는 기계 중립적이다.

 

자바 바이트코드는 플랫폼에 독립적이다.

 

모든 자바 가상 머신은 자바 가상 머신 규격에 정의된 대로 자바 바이트코드를 실행한다.

 

따라서 표준 자바 API까지 동일한 동작을 하도록 구현한 상태에서는 이론적으로 모든 자바 프로그램은 CPU나 운영 체제의 종류와 무관하게 동일하게 동작할 것을 보장한다.

 

출처 :  https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EA%B0%80%EC%83%81_%EB%A8%B8%EC%8B%A0

 


java 컴파일하고 실행하기

 

1. java 코드를 작성하고 저장한다. 확장자는 .java다.

vim hello.java

 

2. java compiler로 컴파일한다. 

javac hello.java

컴파일이 완료되면 .class 확장자의 자바 바이트 코드 파일이 생성된다. 

 

3. 바이트 코드(.class)를 JVM(자바 가상 머신)에 전달하고 실행한다.

java hello

이때 확장자 .class는 입력하지 않는다.

 

4. 빠밤! 끝!

 


23.09.07 추가

macOS jdk 버전 변경하기

//1. JDK 버전 확인
java --version

//2. 설치되어 있는 Java Virtual Machines 목록을 확인
/usr/libexec/java_home -V

//3. macOS에서 JDK 위치
cd /Library/Java/JavaVirtualMachines/

//4. JDK 버전 변경
vim ~/.zshrc // 또는 vim ~/.bash_profile
//다음으로 수정 (없으면 추가)
export JAVA_HOME=$(/usr/libexec/java_home -v 11)  //11버전 선택

//5. 변경 사항 적용
source ~/.zshrc
//또는
source ~/.bash_profile
//또는
//터미널 재부팅

 


23.09.08 추가

 

패키지

package 컴파일 및 실행하기

❯ pwd
/Users/dmlrms4598/Desktop/Study_JavaSpring/project/calc_2/src/calc_1
❯ ll
total 56
drwxr-xr-x  9 dmlrms4598  staff  288  9  7 20:11 .
drwxr-xr-x  4 dmlrms4598  staff  128  9  7 20:11 ..
-rw-r--r--  1 dmlrms4598  staff  165  9  7 20:11 CalAdd.java
-rw-r--r--  1 dmlrms4598  staff  186  9  7 20:11 CalDiv.java
-rw-r--r--  1 dmlrms4598  staff  163  9  7 20:11 CalMul.java
-rw-r--r--  1 dmlrms4598  staff  164  9  7 20:11 CalSub.java
-rw-r--r--  1 dmlrms4598  staff  103  9  7 20:11 ICalculator.java
-rw-r--r--  1 dmlrms4598  staff  350  9  8 13:13 MainClass.java
-rw-r--r--  1 dmlrms4598  staff  211  9  8 13:13 MyCalculator.java

이렇게 생겨먹은 디렉터리 구조에서 /Users/dmlrms4598/Desktop/Study_JavaSpring/project/calc_2/src/calc_1 아래에 있는 *.java 파일들은 모두 하나의 패키지다.

 

이들을 패키지 째로 컴파일하고 실행하는 법.

 

❯ pwd
/Users/dmlrms4598/Desktop/Study_JavaSpring/project/calc_2/src/calc_1
❯ ll
total 56
drwxr-xr-x  9 dmlrms4598  staff  288  9  7 20:11 .
drwxr-xr-x  4 dmlrms4598  staff  128  9  7 20:11 ..
-rw-r--r--  1 dmlrms4598  staff  165  9  7 20:11 CalAdd.java
-rw-r--r--  1 dmlrms4598  staff  186  9  7 20:11 CalDiv.java
-rw-r--r--  1 dmlrms4598  staff  163  9  7 20:11 CalMul.java
-rw-r--r--  1 dmlrms4598  staff  164  9  7 20:11 CalSub.java
-rw-r--r--  1 dmlrms4598  staff  103  9  7 20:11 ICalculator.java
-rw-r--r--  1 dmlrms4598  staff  350  9  8 13:13 MainClass.java
-rw-r--r--  1 dmlrms4598  staff  211  9  8 13:13 MyCalculator.java
❯ pwd
/Users/dmlrms4598/Desktop/Study_JavaSpring/project/calc_2/src/calc_1
❯ javac -d . ./*
❯ ll
total 56
drwxr-xr-x  10 dmlrms4598  staff  320  9  8 14:25 .
drwxr-xr-x   4 dmlrms4598  staff  128  9  7 20:11 ..
-rw-r--r--   1 dmlrms4598  staff  165  9  7 20:11 CalAdd.java
-rw-r--r--   1 dmlrms4598  staff  186  9  7 20:11 CalDiv.java
-rw-r--r--   1 dmlrms4598  staff  163  9  7 20:11 CalMul.java
-rw-r--r--   1 dmlrms4598  staff  164  9  7 20:11 CalSub.java
-rw-r--r--   1 dmlrms4598  staff  103  9  7 20:11 ICalculator.java
-rw-r--r--   1 dmlrms4598  staff  350  9  8 13:13 MainClass.java
-rw-r--r--   1 dmlrms4598  staff  211  9  8 13:13 MyCalculator.java
drwxr-xr-x   9 dmlrms4598  staff  288  9  8 14:25 calc_1
❯ ll calc_1
total 56
drwxr-xr-x   9 dmlrms4598  staff  288  9  8 14:25 .
drwxr-xr-x  10 dmlrms4598  staff  320  9  8 14:25 ..
-rw-r--r--   1 dmlrms4598  staff  283  9  8 14:25 CalAdd.class
-rw-r--r--   1 dmlrms4598  staff  318  9  8 14:25 CalDiv.class
-rw-r--r--   1 dmlrms4598  staff  283  9  8 14:25 CalMul.class
-rw-r--r--   1 dmlrms4598  staff  283  9  8 14:25 CalSub.class
-rw-r--r--   1 dmlrms4598  staff  140  9  8 14:25 ICalculator.class
-rw-r--r--   1 dmlrms4598  staff  530  9  8 14:25 MainClass.class
-rw-r--r--   1 dmlrms4598  staff  941  9  8 14:25 MyCalculator.class
  • javac -d [target directory] [src file]

 

❯ javac ./*
❯ ll
total 112
drwxr-xr-x  16 dmlrms4598  staff  512  9  8 14:28 .
drwxr-xr-x   4 dmlrms4598  staff  128  9  7 20:11 ..
-rw-r--r--   1 dmlrms4598  staff  283  9  8 14:28 CalAdd.class
-rw-r--r--   1 dmlrms4598  staff  165  9  7 20:11 CalAdd.java
-rw-r--r--   1 dmlrms4598  staff  318  9  8 14:28 CalDiv.class
-rw-r--r--   1 dmlrms4598  staff  186  9  7 20:11 CalDiv.java
-rw-r--r--   1 dmlrms4598  staff  283  9  8 14:28 CalMul.class
-rw-r--r--   1 dmlrms4598  staff  163  9  7 20:11 CalMul.java
-rw-r--r--   1 dmlrms4598  staff  283  9  8 14:28 CalSub.class
-rw-r--r--   1 dmlrms4598  staff  164  9  7 20:11 CalSub.java
-rw-r--r--   1 dmlrms4598  staff  140  9  8 14:28 ICalculator.class
-rw-r--r--   1 dmlrms4598  staff  103  9  7 20:11 ICalculator.java
-rw-r--r--   1 dmlrms4598  staff  530  9  8 14:28 MainClass.class
-rw-r--r--   1 dmlrms4598  staff  350  9  8 13:13 MainClass.java
-rw-r--r--   1 dmlrms4598  staff  941  9  8 14:28 MyCalculator.class
-rw-r--r--   1 dmlrms4598  staff  211  9  8 13:13 MyCalculator.java
  • -d 옵션을 사용하지 않으면 이렇게 됨. .class.java가 섞임.

 

❯ ll
total 56
drwxr-xr-x  10 dmlrms4598  staff  320  9  8 14:25 .
drwxr-xr-x   4 dmlrms4598  staff  128  9  7 20:11 ..
-rw-r--r--   1 dmlrms4598  staff  165  9  7 20:11 CalAdd.java
-rw-r--r--   1 dmlrms4598  staff  186  9  7 20:11 CalDiv.java
-rw-r--r--   1 dmlrms4598  staff  163  9  7 20:11 CalMul.java
-rw-r--r--   1 dmlrms4598  staff  164  9  7 20:11 CalSub.java
-rw-r--r--   1 dmlrms4598  staff  103  9  7 20:11 ICalculator.java
-rw-r--r--   1 dmlrms4598  staff  350  9  8 13:13 MainClass.java
-rw-r--r--   1 dmlrms4598  staff  211  9  8 13:13 MyCalculator.java
drwxr-xr-x   9 dmlrms4598  staff  288  9  8 14:25 calc_1
❯ java calc_1.MainClass
result : 15
result : 5
result : 50
result : 2
  • java [package].[main class]

 


클래스 패스

 

2024년 1월 1일 추가

 

 

클래스 패스 - 생활코딩

본 수업에서는 IDE(eclipse, intellij)를 사용하지 않고 운영체제의 기본 에디터를 사용 한다. 클래스 패스 빈 디렉터리에 아래와 같이 코드를 작성한다. 필자는 프로젝트 디렉토리에 /srcbin 이라는 디

opentutorials.org

동작하는데 필요한 .class 파일의 위치를 전달하는 법.

 


 

'BE > Linux' 카테고리의 다른 글

2022-05-03 Daemon 실행  (0) 2022.05.03
2022-05-02 백그라운드 실행  (0) 2022.05.03
2022-05-01 file을 찾는 방법  (0) 2022.05.01
2022-04-23 Shell_script_조건문_사용  (0) 2022.04.23
2022-04-22 Shell_script_4  (0) 2022.04.22