LANGUAGE/Java & Groovy 2020. 4. 15. 19:17

Java Version Switcher for Windows

Windows 10 Home 1903에서 테스트한 내용입니다.

  • 목차
    1. 스크립트파일 경로 지정
    2. CMD 사용자를 위한 방법
    3. GitBash사용자를 위한 방법 (Linux사용자도 참조 가능)
    4. 마치며 (예제요약)
    5. 참조

Windows에서 Java Version을 쉽게 바꾸는 환경을 만들고 싶었습니다.

경우에 따라서 Version을 자주 변경하며 사용하는 분들도 있습니다.
Windows환경 개발자라면 'C:\Program Files\Java' 경로에
다양한 Version의 JDK가 설치되어 있을 것으로 생각됩니다.

Version을 한 번 바꾸려면 정말 성가십니다.

  • 환경변수를 변경해야하고 (변경하러 가는 동선이 길다..)
  • 변경하더라도 탐색기(Explorer)나 CMD 같이 파일 시스템과 연관된 무언가가 열려있을 때 바로바로 안 바뀌기도 합니다.

이따금 IDE를 벗어나야하는 상황이 있습니다.

  • 개발상 IDE에서 간단하게 프로젝트에 필요한 JDK로 설정할 수 있고
  • 영구적으로 변경이라면 Windows의 환경변수로 변경하는 게 최선이라 생각합니다.

하지만, 다양한 버전의 JDK를 테스트해야만 하며
별다른 인프라가 없는 분께 도움이 될 것같습니다.

쉽게 변경-적용하는 법을 살펴 봅시다.

0. 스크립트파일 경로지정

우선~

  1. 어디서든 실행시킬 스크립트파일의 경로 만들고,
    • C:\Program Files\Java\script 폴더를 만듭니다.
  2. 환경변수 설정을 해주는 밑작업이 필요합니다.
    • 방금 만든 C:\Program Files\Java\script라는 경로를 Path 환경변수에 추가합니다.

1. CMD 사용자를 위한 방법

1-1. Session적용방식 - (세션적용)

현재 사용하는 터미널(CMD)의 세션에서만 적용시키는 방식이다.

1) .bat 파일 만들기

  • C:\Program Files\Java\script\java7.bat

    @echo off
    set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_80
    set Path=%JAVA_HOME%\bin;%Path%
    echo Java 7 activated.
    java -version
  • C:\Program Files\Java\script\java8.bat

    @echo off
    set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_191
    set Path=%JAVA_HOME%\bin;%Path%
    echo Java 8 activated.
    java -version
  • C:\Program Files\Java\script\java9.bat

    @echo off
    set JAVA_HOME=C:\Program Files\Java\jdk-9.0.4
    set Path=%JAVA_HOME%\bin;%Path%
    echo Java 9 activated.
    java -version
  • ※ Program Files경로에서 파일변경이 어렵다면 다른 경로에서 파일을 생성하여 복사한다.

2) 실행

java7
java -version

2. GitBash 사용자를 위한 방법

GitBash 환경에서는 Windows의 환경설정을 유연하게 적용하거나 하지 못합니다.

위에서 만든 .bat 파일을 실행해 보아도 GitBash 세션에는 적용되지 않습니다.

떄문에 검색으로 찾은 위의 방법에 자극을 받아 여러 시도들을 해보았습니다.

안되는 방법과 다양한 저의 시도로 얻은 방법들을 열거해보겠습니다.

2-1. 안되는 방법

Shell파일로 환경변수를 변경하여 터미널세션에 적용하고 싶었지만 방법을 찾지 못했다.
Shell 실행중에는 JAVA_HOME 변수가 적용되지만 사용자 메인세션에는 적용되지 않는다. 실행이 끝나면 원래대로 돌아간다.

  • 환경변수 변경시도

    #!/usr/bin/env sh
    export JAVA_HOME="C:\Program Files\Java\jdk1.7.0_80"
    echo "Java 7 activated."
    java -version

2-2. 한 번의 명령 실행에만 적용하기 (일회명령적용)

한 번의 명령 실행에만 Java Version을 변경-적용할 수 있다.

1) Shell 파일 만들기

  • C:\Program Files\Java\script\injava7

    #!/usr/bin/env sh
    export JAVA_HOME="/c/Program Files/Java/jdk1.7.0_80"
    export PATH="$JAVA_HOME\bin:$PATH"
    "$@"
  • C:\Program Files\Java\script\injava8

    #!/usr/bin/env sh
    export JAVA_HOME="/c/Program Files/Java/jdk1.8.0_191"
    export PATH="$JAVA_HOME\bin:$PATH"
    "$@"
  • C:\Program Files\Java\script\injava9

    #!/usr/bin/env sh
    export JAVA_HOME="/c/Program Files/Java/jdk-9.0.4"
    export PATH="$JAVA_HOME\bin:$PATH"
    "$@"

2) 실행

스크립트파일을 앞에 적어주고 뒤에 명령어를 적는다.

injava7 java -version
injava7 gradle -v

2-3. 환경파일까지 변경하기 - (영구적용)

환경파일을 조작하는 방법이다.
하지만, Shell 실행중에 source명령이 실행되더라도 사용자 메인세션에는 적용되지 않기 때문에

  • source ~/.bash_profile을 따로 실행하거나
  • exit로 나갔다 오거나
  • GitBash창을 껐다켜면
    적용된다.

또한GitBash환경에서만 적용되는 것임을 이해하자!

1-방법A) - 오로지 Java 설정만 있을 때 설정파일(.bash_profile) 덮어쓰기

  • C:\Program Files\Java\script\java7

    #!/usr/bin/env sh
    # REPLACE ~/.bash_profile or ~/.bashrc
    echo "export JAVA_HOME=\"/c/Program Files/Java/jdk1.7.0_80\"; export PATH=\"\$JAVA_HOME/bin:\$PATH\";" > ~/.bash_profile
    cat ~/.bash_profile
    # source ~/.bash_profile
    # java -version

1-방법B) - SED를 이용한 부분 변경(Replace) - 설정파일(.bash_profile)에서 /jdk로 시작하고 "로 끝나는 부분을 탐지하여 JDK_DIR변수값으로 변경하기

  • C:\Program Files\Java\script\java7

    #!/usr/bin/env sh
    # REPLACE ~/.bash_profile or ~/.bashrc
    JDK_DIR="jdk1.7.0_80"
    sed -i "s/\/jdk.*\"/\/$JDK_DIR\"/" ~/.bash_profile
    cat ~/.bash_profile
    # source ~/.bash_profile
    # java -version

2) 실행

  • 실행 후 껐다켜서 적용

    java7
    exit

    OR

  • 실행 후 source명령으로 적용

    java7
    source ~/.bash_profile

3. 마치며 - Finally

개발자들이 Mac을 선호하며 Windows를 잘 안사용하곤 합니다.

이것이 도움이 될지 미지수입니다만, 저는 이방법으로 인해 나름대로 득을 봅니다.ㅎㅎ

혹시 더 좋은 방법이 있다면 피드백 부탁드립니다 (굽신굽신..)

저는 개인적으로는 Windows와 GitBash를 애용합니다.

사실 현재 저에게 놓인 개발환경에서 최선이기 때문이기도 합니다.

때문에 Windows환경에서 개발을 하며, 위에서 언급드린 스크립트파일을 모두 구비해놓고 상황에 맞게 사용합니다 :D

  • C:\Program Files\Java\script\

    injava6
    injava7
    injava8
    injava9
    java6
    java6.bat
    java7
    java7.bat
    java8
    java8.bat
    java9
    java9.bat

아무쪼록 1초라도 더 버시고 행복한 인생 영위하시길 바랍니다.✨🎊

마지막으로 아래는 위에 언급했던 것들을 종류별로 열거했습니다.

가지고 계신 버전별로 생성하시면 됩니다.

3-1. CMD에서 세션적용

  • C:\Program Files\Java\script\java7.bat

    @echo off
    set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_80
    set Path=%JAVA_HOME%\bin;%Path%
    echo Java 7 activated.
    java -version
  • on CMD

    java7
    java -version

3-2. GitBash에서 일회명령적용

  • C:\Program Files\Java\script\injava7

    #!/usr/bin/env sh
    export JAVA_HOME="/c/Program Files/Java/jdk1.7.0_80"
    export PATH="$JAVA_HOME\bin:$PATH"
    "$@"
  • on GItBash

    injava7 java -version

3-3. GitBash에서 영구적용

  • C:\Program Files\Java\script\java7

    #!/usr/bin/env sh
    # REPLACE ~/.bash_profile or ~/.bashrc
    JDK_DIR="jdk1.7.0_80"
    sed -i "s/\/jdk.*\"/\/$JDK_DIR\"/" ~/.bash_profile
    cat ~/.bash_profile
    # source ~/.bash_profile
    # java -version
  • on GItBash

    java7
    exit
    java -version

4. Reference - 참조