[java] Windows에서 동시에 실행되는 여러 Java 버전

Java 5에서 실행되는 몇 개의 응용 프로그램이 있으며 이제 Java 6 기반 응용 프로그램을 가져 오려고합니다. Windows에서 두 Java 버전을 함께 사용할 수 있습니까?

다른 응용 프로그램에 적합한 Java 버전을 설정하는 제어판이 있습니까? 또는 다른 설정 방법이 있습니까? 특정 응용 프로그램을 실행하는 데 사용할 Java 버전은 무엇입니까?



답변

물론 Windows에서 여러 버전의 Java를 사용할 수 있습니다. 그리고 다른 응용 프로그램은 다른 Java 버전을 사용할 수 있습니다. 신청서는 어떻게 시작됩니까? 일반적으로 다음과 같은 배치 파일이 있습니다.

java ...

PATH 변수를 사용하여 Java 실행 파일을 검색합니다. 따라서 Java 5가 PATH에서 첫 번째 인 경우 Java 6 응용 프로그램을 실행하는 데 문제가 있습니다. 그런 다음 특정 Java 버전을 사용하도록 배치 파일을 수정해야합니다 (예 : JAVA6HOME값 으로 환경 변수 를 정의 C:\java\java6(이 디렉토리에 Java 6이 설치된 경우)). 배치 파일 호출을 변경해야합니다.

%JAVA6HOME%\bin\java ...


답변

여러 JRE / JDK 버전을 나란히 설치할 수 있습니다. 더욱이 Sun은 프로그램 파일 아래에 각각 다른 폴더를 생성하기 때문에 특별한 일을 할 필요가 없습니다.

각 애플리케이션에 대해 작동하는 JRE를 확인하는 제어판이 없습니다. 기본적으로 작동하는 JRE는 PATH 환경 변수에서 첫 번째가됩니다. 이를 변경하거나 JAVA_HOME 변수를 변경하거나 특정 cmd / bat 파일을 만들어 각각 경로에 다른 JRE가있는 원하는 응용 프로그램을 시작할 수 있습니다.


답변

Java 파일을 추적하기 위해 Windows에서 CLASSPATH, JAVA_HOME 및 PATH 아이디어가 서투른 것에 놀랐습니다. 여러 JRE와 이에 만족하는 방법 때문에 여기에 왔습니다. 정보를 역설하지 않고, 나보다 훨씬 더 영리한 사람으로부터 나는이 문제에 대한 그의 기사를 지적하고 싶습니다. 그것은 나를 위해 완벽하게 해결합니다.

기사 작성자 : Ted Neward : 여러 Java 홈 : Java 애플리케이션에 자체 JRE 제공

서버 측 개발 언어로서의 Java가 기하 급수적으로 성장함에 따라 Java 개발 도구, 환경, 프레임 워크 및 확장에서 동등하게 기하 급수적으로 성장했습니다. 안타깝게도 이러한 모든 도구가 동일한 Java VM 설치에서 잘 작동하는 것은 아닙니다. 일부는 Servlet 2.1 호환 환경이 필요하고 일부는 2.2가 필요합니다. 일부는 JDK 1.2 이상에서만 실행되고 일부는 JDK 1.1 (및 그 이상)에서 실행되지 않습니다. 일부는 스윙 1.0 일 이전의 “com.sun.swing”패키지를 필요로하고 다른 일부는 “javax.swing”패키지 이름을 필요로합니다.

더 나쁜 것은, 단 6 개월 전에 Java를 사용하여 개발 된 시스템이 새로운 (아무래도 관련이없는) 애플리케이션 릴리스에 필요한 일부 Java Extension 설치로 인해 갑자기 “작동하지 않을”수 있으므로 기업 내에서도이 문제를 발견 할 수 있습니다. 이로 인해 회사 전체에 Java 응용 프로그램의 배포가 복잡해질 수 있으며, 악명 높은 “Installing-this-app-breaks-my-system”이 시작된 지 5 년이 지난 후 Microsoft의 DLL 체계로 인해 문제가 발생한 이유를 고객이 정확히 궁금해하게됩니다. 그 이상으로 많이 발전하지 않았습니다. (사실, 새로운 .NET 이니셔티브는 방금 설명한 악명 높은 “DLL-Hell”문제를 해결하려고합니다.)

이 문서에서는 특정 애플리케이션이 자체적 인 개인 JRE를 수신하도록 Java 설치를 구성하는 방법을 설명하여 고객 (또는 시스템 관리자)을 미치게하지 않고 여러 Java 환경이 공존 할 수 있도록합니다.


답변

특정 애플리케이션에 대해 JAVA_HOME 환경 변수 설정을 다르게 변경할 수 있어야합니다.

명령 줄 또는 배치 스크립트에서 시작할 때 set JAVA_HOME=C:\...\j2dskXXXJAVA_HOME 환경을 변경하는 데 사용할 수 있습니다 .

PATH올바른 Java 바이너리를 사용하기 위해 환경 변수를 변경해야 할 수도 있습니다 . 이를 위해 set PATH=%JAVA_HOME%\bin;%PATH%.


답변

SDKMan을 사용하여 동일한 시스템에 여러 버전의 Java 개발 키트를 설치할 수 있습니다.

SDKMan에 대한 몇 가지 사항은 다음과 같습니다.

  1. SDKMan은 무료로 사용할 수 있으며 오픈 소스 커뮤니티에서 개발했습니다.
  2. SDKMan은 bash 로 작성되었으며 시스템에 curlzip / unzip 프로그램 만 있으면됩니다.
  3. SDKMan은 Java, Groovy, Scala, Kotlin 및 Ceylon과 같은 JVM 용 소프트웨어 개발 키트를 약 29 개 설치할 수 있습니다. Ant, Gradle, Grails, Maven, SBT, Spark, Spring Boot, Vert.x.
  4. SDKMan이 자동으로 처리하기 때문에 _HOMEPATH환경 변수 설정에 대해 걱정할 필요가 없습니다 .

SDKMan은 Mac OSX, Linux, Cygwin, Solaris 및 FreeBSD와 같은 모든 UNIX 기반 플랫폼에서 실행할 수 있으며 다음 명령을 사용하여 설치할 수 있습니다.

$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"

SDKMan은 bash 로 작성되었으며 시스템에 curlzip / unzip 만 있으면됩니다. Windows 환경 Cygwin 또는 Git Bash를 먼저 설치 한 다음 위의 명령을 실행 하여 Windows 에도 SDKMan을 설치할 수 있습니다 .

Command sdk list java는 SDKMan을 사용하여 설치할 수있는 Java 버전 목록을 제공합니다.

Java 8 설치

$ sdk install java 8.0.201-oracle

Java 9 설치

$ sdk install java 9.0.4-open

Java 11 설치

$ sdk install java 11.0.2-open

Java 버전 제거

11.0.2-open과 같은 JDK 버전을 제거하려는 경우 다음과 같이 할 수 있습니다.

$ sdk uninstall java 11.0.2-open

현재 Java 버전 전환

모든 터미널 및 애플리케이션에 대해 하나의 버전의 JDK를 활성화하려면 다음 명령을 사용할 수 있습니다.

sdk default java <your-java_version>

위의 명령은 PATH 및 JAVA_HOME 변수도 자동으로 업데이트합니다. 내 기사 How to Install Multiple Versions of Java on the Same Machine에서 더 많은 것을 읽을 수 있습니다 .


답변

“java -version : 1.5″등으로 Java를 호출하는 것은 올바른 Java 버전으로 실행되어야합니다. (분명히 1.5를 원하는 버전으로 바꿉니다.)

Java가 Windows에 올바르게 설치된 경우 사용하는 레지스트리에 저장된 각 버전에 대한 vm 경로가 있으므로 Windows의 환경 버전을 망칠 필요가 없습니다.


답변

또는 링크를 사용하십시오. 실행중인 환경에서 PATH를 업데이트하는 것은 다소 불편하지만 새 버전의 JRE / JDK에 대한 링크를 다시 만드는 것은 쉽습니다. 그래서:

  • 사용하려는 다른 버전의 JDK 설치
  • junction 또는 내장 mklink 명령 으로 해당 폴더에 대한 링크를 만듭니다.
  • PATH를 링크로 설정
  • 다른 버전의 Java를 사용하려는 경우 링크를 삭제하고 새 링크를 만듭니다. PATH / JAVA_HOME / 하드 코딩 된 스크립트는 그대로 유지됩니다.