IntelliJ 및 Tomcat… 변경된 파일은 Tomcat에 의해 자동으로 인식되지 않습니다


135

Tomcat으로 Intellij Ultimate를 실행하고 전쟁을 전개하고 있습니다. 모든 것이 Tomcat의 webapp 디렉토리에 잘 배치됩니다.

xhtml 파일과 같은 파일을 변경할 때 tomcat이 해당 변경 사항을 자동으로 선택하는 방법이 있습니까? 현재 Intellij에서 파일을 복사하여 tomcat 웹 앱 디렉토리에있는 디렉토리로 복사해야합니다. 재 컴파일해야 할 특정 파일이 있지만 xhtml은 그중 하나가 아닙니다.

답변:


21

스크린 샷을 사용하여 일련의 동작을 설명하겠습니다.

  1. Tomcat 실행 / 디버그 구성을 엽니 다 (실행> 구성 편집)

여기에 이미지 설명을 입력하십시오

  1. 추가 아이콘을 클릭하고 '아티팩트'를 선택한 후 다음을 선택하십시오 pizza_mvc:war exploded. 여기에 이미지 설명을 입력하십시오

  2. '업데이트 작업'및 '프레임 내 비활성화'를 수정하십시오. 여기에 이미지 설명을 입력하십시오

  3. 자원을 새로 고치려고 할 때마다 <Ctrl> + F10


" '업데이트'작업"을 확인하도록 알려 주셔서 감사합니다
km1

290

IntelliJ IDEA와의 전쟁을 전개하는 경우에는 수행 할 수 없습니다. 그러나 폭발적인 전쟁 을 전개하는 경우 있습니다 . 아이디어에서 :

  1. Tomcat Run / Debug 구성을 엽니 다 ( Run> Edit Configurations )
  2. "배포"탭으로 이동
  3. "서버 시작시 배치"섹션에서 아티팩트를 제거하십시오 (있는 경우). my-webapp-name:war
  4. 추가 아이콘을 클릭하고 '아티팩트'를 선택한 다음 my-webapp-name:war exploded
  5. "배포 할 아티팩트 선택"대화 상자에서 확인을 클릭하십시오.
  6. 여전히 Run / Debug Configuration 창에서 "Server"탭을 선택하십시오.
  7. 해당 탭의 중간에서 "프레임 비활성화"설정을 "리소스 업데이트"또는 "클래스 및 리소스 업데이트"로 변경하십시오.
    • 자원 업데이트 : 변경된 모든 자원 (즉, 클래스 이외의 모든 애플리케이션 구성 요소)이 업데이트됩니다.
    • 클래스 및 리소스 업데이트 : 변경된 모든 리소스가 업데이트됩니다. 변경된 클래스는 다시 컴파일됩니다. 실제 클래스의 업데이트 여부는 기능 웹 서버에 따라 다릅니다. 내가 기억하면 Tomcat은 html / xhtml 및 jsp 파일을 다시로드하지만 JSP 또는 서블릿이 사용하는 서블릿 또는 클래스는 다시로드하지 않습니다. 이를 위해 동적 클래스 로더를 사용하려면 Tomcat을 수정해야합니다.
  8. " On 'update' "작업을 위에서 선택한 작업으로 설정할 수도 있습니다.
    • 실행 창에서 업데이트 업데이트 아이콘아이콘 (또는 Ctrl+ F10)을 누를 때 발생하는 결과를 결정했습니다 .
    • "대화 상자 표시"는 업데이트 아이콘을 누를 때마다 IDEA에서 메시지를 표시할지 여부를 결정합니다.
  9. 확인을 클릭하십시오.

이제 변경을 할 때마다 IDEA는 프레임이 비활성화 될 때 (즉, 포커스를 잃는) 변경된 파일을 재배치합니다. 1-2 초가 소요되며 IDEA의 하단 상태 표시 줄에 표시됩니다. 명백하게. 웹 브라우저를 새로 고쳐야 새 파일을 가져옵니다 (물론 페이지에 페치와 같은 아약스 자동 새로 고침이있는 경우 제외).

Tomcat과의 좋은 조합은 "프레임 비활성화"를 "리소스 갱신"으로 설정하고 "업데이트시"조치를 "재배치"또는 "서버 다시 시작"으로 설정하는 것입니다. 이렇게하면 정적 페이지를 프레임 비활성화를 통해 빠르게 업데이트 할 수 있습니다. '업데이트'액션을 통해 클래스가 업데이트되었습니다.

ZeroTurnaround 판매라는 기업 JRebel 동적 클래스 로더 솔루션입니다. 그들은 또한 매우 좋은 주제에 대한 다섯 부분으로 구성되어 있습니다.


오류가 발생했습니다 : Error: Artifact 'my-webapp-name:war exploded' has invalid extension수정하는 방법?
Anton Dozortsev

3
또한 자동 클래스 재로드에 DCEVM을 사용하는 것이 좋습니다. 그런 다음 "클래스 및 리소스 업데이트"를 사용하여 응용 프로그램을 재배치하지 않고 소스 코드에 변경 사항을 적용 할 수 있습니다. blog.jetbrains.com/idea/2013/07/…를 참조하십시오 . 이 학습서에서 설명하는 것 외에도 Tomcat 실행 구성의 설정 / 연결-디버그 탭에서 JAVA_HOME을 설정하여 DCEVM의 JRE를 지정해야합니다.
Alex Fedulov

1
@yaroslavprokipchyn-JBoss 및 '특별한'요구 사항에 익숙하지 않습니다. 그러나 내가 아는 한 동일하게 작동해야합니다. Tomcat의 경우 IDEA는 Tomcat에 target / {contextName} 디렉토리를 webapp 루트 디렉토리로 사용하도록 지시하는 Tomcat (context.xml) 구성을 작성합니다. JBO의 특정 정보에 대해서는 도움말 안내서를 확인하십시오.
Javaru

3
7 단계에서는 모든 아티팩트가 "폭발 된"것으로로드되지 않은 경우 (적어도 Intellij 14에서) 적절한 드롭 다운 선택 사항을 얻지 못합니다.
mortensi

1
@ChiefTwoPencils-5 단계는 실행 / 디버그 구성 창이 아니라 "배포 할 아티팩트 선택"대화 상자 ( "적용"이 없음)에서 확인을 클릭하고 있습니다. 5 단계에 설명을 추가했습니다.
Javaru

12

클래스와 리소스를 업데이트하려면 Tomcat디버그 모드 에서 실행 하십시오 . 이 모드에서 IntelliJ 는 문제없이 클래스와 리소스를 업데이트합니다 (핫 스왑).

같은 문제가 있습니다. "실행 모드"로 실행 되었기 때문에 IntelliJ 가 프로젝트를 업데이트하지 않았습니다. 디버그 모드 에서 실행하고 Ctrl+를 누르면 F10클래스와 리소스가 업데이트됩니다.


Control-F10이 문제를 해결했습니다. 감사합니다!
Jeffrey Getzin

3

더 좋은 방법을 찾았습니다.

Eclipse 에서는 정적 파일을 자동으로 빌드, 컴파일 및 다시로드했습니다. 실제로 정적 파일은 src / main / webapp 에서 직접 제공됩니다 .

IntelliJ 에는 src / main / webapp 에서 직접 제공하는 대신 대상에 폴더가 있으며, 여기에는 src / main / webapp 및 기타 컨텍스트 관련 .. web-inf / classes / lib 의 사본이 있습니다 .

당신이 목표 대신 폭발 유물의 출력을 넣으면 SRC / 메인 / 웹 애플리케이션 , 그것은 당신에게 소스 파일을 덮어 쓰지 않습니다, 그것은 바로 될 것입니다, 당신은 명중 할 필요가 없습니다 - 업데이트 자원 / 업데이트 자원 및 클래스를

IntelliJ에서해야 할 일은

  1. 분해 된 아티팩트 출력 디렉토리를 src / main / webapp로 수정 여기에 이미지 설명을 입력하십시오
  2. 더티 클래스 저장 및 재 컴파일 / 컴파일을위한 매크로 만들기 (cmd + shift + f9) 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오
  3. 레지스트리 및 환경 설정을 편집하여 자동으로 빌드하고 앱이 실행되는 동안 빌드하십시오 (cmd + shift + a-registry). 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

그런 다음 IntelliJ 외부에서 정적 파일을 변경하는 작업이 있으면 IntelliJ 및 Update Resources로 이동하지 않고 즉시 변경 사항을 볼 수 있으며 저장하고 컴파일하는 해당 매크로가있는 클래스에 대해서도 컴파일 할 수 있습니다 (참고 : Compile을 누르십시오. / 재 컴파일 : cmd + shift + F9 / cmd + F9-여러 개의 편집기를 열면 더티 편집기가 더티가 아니며 변경 사항 (클래스)이 다시로드됩니다.


레지스트리 compiler.automake ..를 사용하면 save 만 눌러 변경 사항을 푸시하는 것처럼 보입니다.
Radu Toader

0

exploded war 폴더를 배포하고 핫 리로딩을 활성화 한 후 디버그 모드에서 바람둥이를 시작할 때만 가능합니다.

이를 달성하기위한 단계는 다음과 같습니다.

  1. Tomcat 실행 / 디버그 구성을 엽니 다 (실행> 구성 편집)
  2. "배포"탭으로 이동합니다. 3. "서버 시작시 배포"섹션에서 이슈 my-webapp-name : war을 제거합니다 (있는 경우).
  3. 추가 아이콘을 클릭하고 '아티팩트'를 선택한 다음 my-webapp-name : war exploded를 선택하십시오.
  4. "배포 할 아티팩트 선택"대화 상자에서 확인을 클릭하십시오.
  5. 여전히 Run / Debug Configuration 창에서 "Server"탭을 선택하십시오.
  6. "프레임 비활성화"및 "업데이트 조치"설정을 "클래스 및 자원 업데이트"로 변경하십시오.
  7. 적용 및 저장
  8. 파일을 클릭 한 다음 설정을 클릭하거나 CTRL + ALT + S를 눌러 일반 프로젝트 설정으로 이동하십시오.
  9. "빌드, 실행, 배포"로 이동
  10. 컴파일러
  11. 자동으로 프로젝트 빌드를 선택하십시오.
  12. 저장
  13. 디버그 모드에서 Tomcat 시작

0

멀티 파트 파일을 보거나 바로 재생하려면 대상 폴더에 직접 업로드하십시오. * (대상 폴더 / 정적 /로 쓰기 위치 만 변경)

String yourpath = C\\andSoForth
    yourPath + "\\target\\classes\\static\\uploads\\audiofiles\\"

IDE를 다시 시작하지 않고도 파일을 즉시 볼 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.