sourcecode

인텔리주 IDE 탑재 스프링 부트 핫스왑

copyscript 2023. 3. 10. 22:42
반응형

인텔리주 IDE 탑재 스프링 부트 핫스왑

Intelij IDE에서 스프링 부트 어플리케이션이 정상적으로 실행되고 있습니다.즉, Spring Application.run에 위임하는 메인 메서드를 가진 어플리케이션클래스를 기동했습니다.핫스왑을 제외한 모든 것이 잘 작동합니다.소스를 변경하면 어플리케이션을 재시작해야 합니다.응용 프로그램을 디버깅모드로 기동해도 핫스왑이 동작하지 않습니다.Intelij의 Debug 설정에서 핫스왑이 활성화 되어 있는 것을 알 수 있었습니다.

제가 관찰한 바로는 스프링부트 응용 프로그램을 실행할 때 사용되는 클래스 패스는

/projects/MyProject/클래스/실가동/...

아래 파일classes/production코드를 변경해도 업데이트가 되지 않습니다.Intelij IDE는 파일을 컴파일하지만 클래스/프로덕션 디렉토리는 갱신하지 않습니다.인텔리J IDE를 사용한 스프링 부트용 핫 스왑을 입수하려면 어떻게 해야 합니까?

devTools를 사용하는 솔루션은 다음과 같습니다.

1 - 프로젝트에 devtools 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

2 - 자동 빌드 활성화

[ Settings ](설정) --> [ Build - Execution - Deployment ](빌드-실행-전개) --> 컴파일러를 열고 다음을 활성화합니다.

Build Project Automatically.

3 - 컴파일러 값을 업데이트합니다.오토메이크allow.when.app.running

누르다ctrl+shift+A를 검색합니다.registry레지스트리에서 다음을 활성화합니다.

compiler.automake.allow.when.app.running

참고 자료:

근본 원인을 찾아냈다.이것은 스프링 부트와는 관계가 없습니다.groovy 소스 파일을 변경할 때 파일이 자동으로 컴파일되지 않았습니다.

변경된 파일을 다시 컴파일하여 스왑하려면:

  • Ctrl+Shift+F9Windows 에서는
  • Cmd+Shift+F9Mac에서

순서 1: 개발자 도구의 중단 추가

메이븐.

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

그래들

dependencies {
    compile("org.springframework.boot:spring-boot-devtools")
}

순서 2: [파일]로 이동 | [설정] | [빌드], [실행], [도입] | [컴파일러]

프로젝트 자동 구축 및 적용확인

여기에 이미지 설명 입력

순서 3: 단축키 Ctrl+Shift+A & Search Registry 키워드를 누른 후 Enter 키를 누릅니다.

여기에 이미지 설명 입력

컴파일러를 유효하게 합니다.오토메이크allow.when.app.running & Close 버튼을 클릭합니다.

여기에 이미지 설명 입력

순서 4: 마음에 드는 웹 브라우저 캐시 비활성화

여기에 이미지 설명 입력

순서 5: 완료!!

YouTube에서 솔루션 보기

솔루션

제 경우 Spring Boot 개발 도구를 추가하고 빌드 프로젝트를 자동으로 확인해도 작동하지 않았습니다.부족한 것은 다음과 같습니다.

  1. 프로젝트 실행 구성으로 이동합니다.

  2. 'Update' 액션과 'On frame deactivation'을 모두 'Update classes and resources'로 설정합니다.그리고 그것은 마법처럼 작동했다.

여기에 이미지 설명 입력

스프링 장착을 사용합니다.콩을 새로 고치면 잘 작동합니다.JRebel 대신 무료입니다.

다른 방법은 DCEVM 또는 핫스왑에이전트를 사용하는 것입니다.

저도 같은 문제를 발견했어요.저는 Intelij 13.1.1을 사용하고 있으며, 변경된 클래스를 핫스왑하기 위해 사용하고 있습니다.앱을 디버깅 모드로 실행하고 클래스를 변경한 후 수동으로 "Run->Reload Changed Classes"를 선택합니다.

또한 http://www.jetbrains.com/idea/webhelp/reloading-classes.html에 표시된 바와 같이 디버거를 핫스왑으로 설정했지만 작동하지 않는 것 같습니다.

어쨌든 수동 "Run->Reload Changed Classes" 메뉴는 작동합니다.

@Sameer Khanal의 답변은 효과가 있었지만, 시간이 많이 흘렀기 때문에 몇 가지 설명을 드리도록 하겠습니다.

  1. 스프링 부트 devtools 의존관계 설치(https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools)

  2. 실행 옵션 수정

  3. 때 사용하다의 을 업데이트 합니다.On 'Update' action ★★★★★★★★★★★★★★★★★」On frame deactivation다음과 같이 합니다.

  4. OK(확인)를 클릭하면 완료

도움이 되었으면 좋겠다

여러 번 변경할 경우 "Compile And Reload File"을 사용합니다(먼저 "spring-boot-devtools" 추가).Mac에서 그림을 표시하려면 "Shift"를 두 번 클릭합니다.

아니면 제가 아직 시도하지 않은 스프링 로드를 사용해 보세요.하지만 효과가 있을 것 같아요.여기에 이미지 설명 입력

배포 아티팩트가 폭발적으로 증가하면 배포 탭에서 문제가 해결되었습니다.

다음 중 하나의 방법을 사용하여 Tymeleaf 템플릿을 자동으로 새로고침할 수 있습니다.

  1. 스프링 부트 개발 도구
  2. Tymeleaf 템플릿 경로 변경
  3. Gulp Watch(굴프 워치)

Gulp 워치는 셋업이 쉽고 동작도 좋기 때문에 추천합니다.

var gulp = require('gulp'), 
watch = require('gulp-watch');

gulp.task('watch', function () {
    return watch('src/main/resources/**/*.*', () => {
            gulp.src('src/main/resources/**')
                //replace with build/resources/main/ for netBeans
                .pipe(gulp.dest('out/production/resources/')); 
    });
});

gulp.task('default', ['watch']);

이제 단말기에 다음 명령을 입력하여 gulp watch를 시작합니다.

$ gulp 
//OR
$ gulp watch

IntelliJ IDE에서 재시작하지 않고 Tymeleaf 템플릿을 자동 새로고침하는 블로그 투고를 작성했습니다.

언급URL : https://stackoverflow.com/questions/23155244/spring-boot-hotswap-with-intellij-ide

반응형