[java] Java 프로젝트 용 Vagrant : VM에서 컴파일해야합니까 아니면 호스트에서 컴파일해야합니까?

여기에 질문이 있습니다. 자바 프로젝트 (또는 그 문제에 대해 컴파일 된 언어 프로젝트)에 Vagrant를 사용할 때 VM 또는 호스트에서 컴파일해야합니까? 또한 IDE와 모든 개발 도구가 VM 내부에서 실행되기를 원하십니까, 아니면 호스트에서 실행되기를 원하십니까?

Java IDE 및 컴파일 / 배포 프로세스가 Vagrant VM에서 작동하는 방식이 정확히 정의되지 않은 것 같습니다 . 일반적으로 내 인상은 코드가 호스트에서 편집되고 VM에서 실행되므로 컴파일되지 않은 언어에 적합합니다. Stackoverflow에 대한 다른 답변 은 추가 컴파일 단계로 인해 Vagrant가 컴파일 된 언어에 덜 유용하다는 것을 암시했지만 여전히 무엇을 할 수 있는지보고 싶습니다.

이미 생각해 본 몇 가지 :

VM에서 컴파일하는 이유

  • 호스트에서 컴파일하는 경우 java는 설치할 소프트웨어 중 하나입니다.
  • 호스트에서 컴파일하는 경우 호스트의 Java 버전을 VM의 최신 버전으로 수동으로 유지해야합니다.
  • 호스트의 해당 Java 버전을 사용하지 못할 수 있습니다 (예 : Mac).

VM에 IDE가있는 이유

  • 환경과 IDE 간의 긴밀한 통합, 바로 가기를 사용하여 애플리케이션 실행 가능
  • 원격 디버깅없이 자바 애플리케이션 용 디버거를 연결할 수 있습니다 (1 단계 실행 / 디버그).

호스트에서 컴파일하는 이유

  • 더 빠른 컴파일 시간
  • VM을 프로덕션에 최대한 가깝게 유지하려는 경우

호스트에 IDE가있는 이유

  • 호스트에서 코드를 편집하고 VM에서 실행하는 것은 방랑 규칙입니다.
  • UI 성능 향상 (X 전달 및 VNC가 느림)

어떻게 생각하십니까? VM 또는 호스트 내부에서 IDE를 실행해야합니까? VM 또는 호스트 내부에서 컴파일해야합니까?



답변

많은 생각과 실험 끝에 Vagrant를 사용할 위치와 Java 개발 워크 플로와 통합하는 방법을 결정했습니다.

JavaEE / 배포 된 애플리케이션의 경우 웹 서버와 데이터베이스 서버를 구성하는 것은 Vagrant의 사용을 보증하기에 “충분한”복잡성을 가진 것입니다. 두 대의 서버와 다양한 구성 방법을 사용하면 구성이 한 개발자에서 다른 개발자로 쉽게 동기화되지 않아 “내 컴퓨터에서 작동”현상이 발생합니다. 이러한 종류의 소프트웨어의 경우 호스트에서 코드를 편집 및 컴파일하고 프로덕션 환경을 모방하는 Vagrant VM에 배포하는 것이 가장 좋습니다. 웹 서버의 배포 폴더는 호스트의 컴파일 대상에 심볼릭 링크되어 수동으로 재배포 할 필요가 없습니다. 따라서 Vagrant는 개발 라이프 사이클의 중요한 부분이 될 수 있습니다.

독립형 Java 애플리케이션 (라이브러리 또는 데스크톱 애플리케이션과 같은)의 경우 이야기가 약간 변경됩니다. 이 경우 Vagrant를 사용하지 않고 호스트 시스템에서 편집, 컴파일 및 실행하는 것이 가장 합리적입니다. 큰 Java IDE (Eclipse, Netbeans, IntelliJ …) 중 하나를 사용하는 경우 시스템에 Java가 이미 설치되어 있습니다. 이 시점에서 Vagrant를 사용하는 오버 헤드에 비해 이점이 거의 없으며 개발 프로세스에 복잡성을 추가하는 역할 만합니다. IDE로 Java를 편집 할 수있을 때 쯤이면 호스트에서 모든 것을 실행할 수 있기 때문입니다. 한 가지 문제는 프로젝트에 필요한 Java 버전이 호스트에서 IDE를 실행하는 버전과 일치하지 않을 수 있다는 것입니다. 일반적으로 (희망적으로) 이것은 그다지 문제가되지 않습니다. 이 글을 쓰는 시점에서 JDK6는 수명이 다했으며 JDK8은 아직 출시되지 않았습니다 (어디에서 나올지 추측). 그러나 여러 버전을 실행해야하는 경우 필요에 따라 호스트에서 JAVA_HOME을 설정할 수 있어야합니다. 이로 인해 추가 복잡성이 발생하지만 다른 버전의 Java를 사용하는 프로젝트로 작업하는 것만으로 Vagrant 런타임을 유지 관리하는 것보다 덜 복잡합니다.

흥미로운 질문은 컨테이너없는 웹 애플리케이션으로 무엇을해야 하는가입니다. 웹 서버 (이 경우 애플리케이션 내부)가 외부 웹 서버에서와 마찬가지로 VM 내부에서 실행되어야합니까? 아니면 독립형 애플리케이션에서했던 것처럼 호스트에서 실행 하시겠습니까? 컨테이너가없는 웹 애플리케이션의 경우 걱정할 외부 웹 서버가 없지만 데이터베이스는 여전히 존재합니다. 이 상황에서 우리는 하이브리드 접근 방식을 취할 수 있습니다. 컨테이너없는 웹 앱을 실행하는 것은 기본적으로 독립형 애플리케이션을 실행하는 것과 동일하므로 호스트 컴퓨터에서 코드를 컴파일하고 실행하는 것이 효과적입니다. 그러나 데이터베이스가 관련되어 있으면 데이터베이스 서버가 자체 Vagrant VM에있는 것이 합리적 일 정도로 복잡하고 구성이 충분합니다.

바라건대 이것은 Vagrant에 관심이있는 Java 개발자에게 사용 방법에 대한 컨텍스트를 제공합니다.


답변

작년에이 주제에 관심이있었습니다. 🙂

내 해결책은 플래그로 구성 가능한 방랑자 기계를 갖는 것입니다. 예를 들어, 일부 개발자는 호스트 시스템에서 코딩하는 것을 선호하는 반면 다른 개발자는 데스크톱 및 IDE가 포함 된 훨씬 더 통합 된 환경을 선호하기 때문에이 플래그 중 하나는 데스크톱 GUI를 활성화합니다.

데스크톱 속도 저하에 대처하려면 다음과 같이 매우 유용한 방랑 플러그인 (예 … 방랑에는 개발 환경을 크게 개선하는 플러그인이 있습니다)을 설치해야합니다. 방랑 플러그인 설치 vagrant-vbguest이 플러그인은 모든 게스트에 가상 박스 게스트 추가를 설치합니다. virtualbox 인터페이스를 사용하는 동안 사용할 수 있도록합니다. 그런 다음 GUI를 활성화하려면 다음과 같이 Vagrantfile을 편집하십시오.

config.vm.provider “virtualbox”do | vb | vb.gui = 진정한 끝

공유 폴더 성능을 높이기 위해 rsync를 사용하는 것이 좋습니다. config.vm.synced_folder “./git”, “/ home / vagrant / git”, type : “rsync”, rsync__exclude : “.git /”여기에서 소스 코드가 호스트에서 편집 된 다음 게스트에 다시 동기화되는 방식입니다.


답변