[java] JRebel에 대한 대안 재배치 [닫기]
JRebel을 사용하면 새로 컴파일 된 코드를 응용 프로그램을 다시 시작하지 않고 재배치 할 수 있습니다. 대안이 있는지 궁금합니다 (무료?). 자주 묻는 질문 페이지는이 질문에 대한 대답,하지만 난이 JRebel 편중 것 확신합니다. 이 질문은 1 년 전에이 사이트에서 질문되었지만 누군가 새로운 정보가 있는지 확인하기 위해 다시 가져 왔습니다.
참고로, 나는 JRebel을 정말로 좋아하지만 무료 대안이 있다면 시도해 볼 수 있습니다.
한 가지 추가 참고 사항으로, 저는 오픈 소스 프로젝트를 진행 중이며 오픈 소스 프로젝트에 있음을 증명할 수있는 사람들에게 1 년 무료 라이센스를 제공합니다. 어느 것이 나를 위해 잘 작동하지만 (www.kuali.org), 나는 그 프로젝트에 영원히 있지 않을 것입니다.
답변
런타임시 무제한 클래스 재정의를 허용하는 HotSpot VM의 수정 인 DCEVM을 살펴보십시오 . 필드와 메소드를 추가 / 제거하고 런타임에 클래스의 수퍼 유형을 변경할 수 있습니다. DCEVM의 기능은 JEP 159의 일부로 향후 Java 업데이트에 통합 될 수 있습니다 .
원래 사이트에서 사용 가능한 바이너리는 Java 6u25 및 Java 7의 초기 버전으로 제한됩니다. 프로젝트는 Github 에서 분기되었으며 최신 버전의 Java 7 및 8을 지원합니다. 관리자는 Windows / 32에서 32/64 비트 VM에 대한 바이너리를 제공합니다. 리눅스. Java 11부터 프로젝트는 새로운 GitHub 저장소 로 옮겨졌으며 이제는 OS X 용 바이너리도 제공합니다.
DCEVM은 데비안 및 우분투 용으로 제공되며 OpenJDK와 편리하게 통합되며로 호출 할 수 있습니다 java -dcevm
. 패키지 이름은 기본 JDK 버전에 따라 다릅니다.
- 데비안 7 & 8 및 우분투 15.04 : openjdk-7-jre-dcevm
- 데비안 9와 우분투 16.04 : openjdk-8-jre-dcevm
- 데비안 10 및 우분투 19.04 : openjdk-11-jre-dcevm
답변
Hotswap Agent 는 많은 Java 프레임 워크 (Spring Bean 정의 재개, 최대 절전 모드 엔티티 맵핑, 로거 레벨 설정 등)를 지원하는 DCEVM의 확장입니다.
Java 1.7 용 DCEVM 및 컴파일 된 바이너리를 설정하는 방법도 많이 있습니다.
답변
DCEVM은 고급 클래스 재정의를 지원하며 현재 JDK7 및 JDK8에 사용할 수 있습니다.
https://github.com/dcevm/dcevm/releases
HotswapAgent는 무료 JRebel 대안이며 다양한 프레임 워크에서 DCEVM을 지원합니다.
답변
Spring 사람들은 Grails 리로딩에 사용되었지만 Java에서도 작동합니다.
답변
DCEVM에 대한 기사를 작성했습니다 : Spring-mvc + Velocity + DCEVM
내 환경이 아무런 문제없이 실행되기 때문에 그만한 가치가 있다고 생각합니다.
답변
https://github.com/fakereplace/fakereplace : 핫 스왑이 허용하는 것 이상으로 클래스를 핫 교체 할 수있는 오픈 소스 프로젝트를 진행하고 있습니다.
그것은 당신을 위해 작동하거나 작동하지 않을 수 있지만, 의견은 감사합니다
답변
다음을 살펴볼 수 있습니다.
HotSwap 지원 : Java HotSpot VM의 객체 지향 아키텍처를 사용하면 즉석 클래스 재정의 또는 “HotSwap”과 같은 고급 기능을 사용할 수 있습니다. 이 기능은 디버거 API를 통해 실행중인 응용 프로그램에서 수정 된 코드를 대체 할 수있는 기능을 제공합니다. HotSwap은 Java 플랫폼 디버거 아키텍처에 기능을 추가 하여 디버거의 제어하에 실행 중에 클래스를 업데이트 할 수 있도록합니다 . 또한 프로파일 링 코드가 삽입 된 버전의 메소드에서 핫 스와핑하여 프로파일 링 작업을 수행 할 수 있습니다.
현재 애플리케이션을 다시 시작하지 않고 새로 컴파일 된 메소드 본문 만 재배치 할 수 있습니다. 디버거로 실행하기 만하면됩니다. 나는 Eclipse에서 그것을 시도하고 훌륭하게 작동합니다.
또한 Emmanuel Bourg가 그의 답변 ( JEP 159 ) 에서 언급했듯이 수퍼 타입 추가와 메소드 및 필드 추가 및 제거를 지원할 수 있기를 희망합니다.