Tomcat과 Eclipse를 핫 배포 환경으로 통합


88

내 JSP 및 서블릿 (가능한 경우)의 변경 사항이 배포없이 즉시 반영되도록 eclipse와 tomcat을 통합 된 방식으로 설정하고 싶습니다.

좋아, 이것은 인터넷 전체에 걸쳐 많은 답변을 가지고 있지만 모두 다르게 보이는 질문 중 하나입니다. (Sysdeo 플러그인 사용, JBOss 플러그인 사용, 오래된 Eclipse로 작업 수행, 대신 MyEclipse 사용 등) 및 참조 할 최종 리소스를 찾을 수 없습니다. 그래서 제 이익을 위해 이것을 설정하는 가장 간단하고 권장되는 절차는 무엇입니까?

이것은 내가 이클립스와 바람둥이가 독립적으로 실행되고 있다고 가정합니다. 나는 실제로 http://www.ibm.com/developerworks/opensource/library/os-eclipse-tomcat/index.html 지침을 사용하여 핫 배포가 아닌 방식으로 통합했습니다 .

Eclipse 버전 버전 : 3.4.2 (Ganymede) Tomcat v6.0.20


17
4 년이 지난 지금도 여전히 문제라는 사실에 당황합니다. 어서, 그것은 꽤 근본적입니다.
Konrad Garus 2013 년

7 년 후 (거의) 해결책을
찾았다

답변:


75

두 가지 옵션이 있습니다.

첫째, Eclipse를 사용하면 약간의 구성 변경으로이를 수행 할 수 있습니다 (이 자세한 게시물 참조 ).

  • 서버 목록에 Tomcat 추가
  • 프로젝트를 "동적 웹 프로젝트"로 만듭니다 (생성 마법사 또는 설정의 패싯 섹션을 통해).
  • tomcat에 프로젝트를 추가하고 "배포 어셈블리"를 구성합니다.
  • 목록에서 바람둥이를 두 번 클릭하여 구성을 엽니 다.
  • "게시"를 "자동으로 게시하지 않음"으로 변경합니다 (이는 ctrl + s를 눌러도 서버가 다시 시작되지 않음을 의미 함).
  • 디버그 모드에서 Tomcat 시작

이것은 여전히 ​​코드 변경 사항을 반영하지만 서버를 다시 시작하지는 않습니다.

둘째, 오랫동안 FileSync 플러그인 을 사용 했습니다 .

  • bin director에서 WEB-INF/classestomcat 설치의 모든 클래스를 보내도록 플러그인을 구성 합니다 (이는 배포 어셈블리 구성과 거의 동일).
  • 다른 모든 리소스를 해당 위치로 이동하도록 구성
  • 선택적으로 파일 동기화 위치 설정의 모든 절대 경로를 단일 변수로 구체화하고 해당 변수를 Eclipse에서 구성합니다 (따라서 모든 멤버가 eclipse를 사용하는 경우 파일 동기화 설정도 커밋 할 수 있음).
  • Eclipse의 서버 목록에 Tomcat을 추가하고 "서버 위치"옵션을 "톰캣 설치 사용"으로 구성합니다 (서버 목록에서 tomcat을 두 번 클릭하면 화면이 열립니다).
  • 디버그 모드에서 Tomcat 시작

그런 식으로 완벽하게 작동합니다. 모든 비 구조적 변경은 재배포없이 즉시 반영됩니다.

업데이트 : 여기에서 핫 배포 방법에
대해 자세히 알아볼 수 있습니다 . 또한 서블릿 컨테이너와 작업 공간을 쉽게 동기화 하는 프로젝트만들었습니다 .


@VladimirTsvetkov 더 -이 두 개의 별도 옵션이 없습니다
Bozho

첫 번째 접근 방식을 시도하고 있지만 Maven Overlays를 사용하고 있으며 오버레이 중 하나에서 파일을 변경하면 서버가 여전히 다시 시작됩니다 (오버레이는 동적 웹 프로젝트가 아니라 동적 웹 모듈입니다). 어떤 아이디어?
Hoffmann

2
"게시"를 "자동으로 게시하지 않음"으로 변경하면 JSP가 변경 될 때 더 이상 다시로드 / 다시 컴파일되지 않는다는 인상을 받았습니다. 클래스 재로드 부분은 디버그 모드에서 Tomcat을 시작하면 잘 작동합니다.
yglodt 2014

5
다른 방식으로합니다. 먼저 자동으로 게시하도록 변경합니다. 둘째, Modules서버 구성에서 탭을 클릭 한 다음을 클릭 edit하고 선택을 취소합니다 auto deploy enabled. 이것이 가장 간단한 방법이라고 생각합니다. 추신 : 당신의 첫 번째 방법은 나를 위해 작동하지 않습니다.
hiway

@hiway, 서버 구성 탭 내의 모듈 탭은 어디에 있습니까?
Mateus Viccari 2014

30

eclipse가 $ TOMCAT / webapps / MyWebApp / WEB_INF / classes 디렉토리에 직접 클래스 파일을 작성하도록하십시오. 그런 다음 apache-tomcat을 구성하여 클래스 파일이 업데이트되었는지 확인하고 업데이트 된 경우 다시로드합니다.

클래스가 변경 될 때 자동으로 다시로드하도록 tomcat을 구성하려면 다음을 수행해야합니다.

편집 $TOMCAT/conf/context.xml및 설정 :

<Context reloadable="true"> 

webapps/$YourWebApp/web.xml파일 을 편집하고 다시로드 하고 다음을 포함 해야 할 수도 있습니다 .

<web-app reloadable="true">

두 가지 변경이 모두 필요한지 기억할 수 없지만 이것이 내가 tomcat-6.0.18을 자동으로 다시로드하도록 구성한 방법입니다.


문서에 따르면 tomcat.apache.org/tomcat-6.0-doc/config/context.htmlContext 은 server.xml 파일에 요소를 배치 하지 않도록 권장 하지만 / WEB-INF / classes / 및 / WEB-INF를 모니터링해야합니다. / lib. web-app요소 의 속성에 대해 어디서 읽었 습니까?
Michael

죄송합니다. 답변을 조금 잘못 읽었습니다. context.xml은 "각 웹 애플리케이션에 대해로드되어야합니다".
Michael

2
Eclipse가 클래스 파일을 작성하는 위치를 어떻게 구성합니까?
yglodt 2014

7

면책 조항 : 저는 행복한 고객 일 뿐이며 Zero Turnaround를 위해 일하지 않으며 어떤 식 으로든 그들과 제휴하지 않습니다.

JRebel을 확인하세요 . 웹 애플리케이션을 다시 시작하지 않고도 코딩 할 수 있습니다. 기본적으로 클래스를 계측하고 변경 사항을 적용하여 작동합니다. 다음을 포함하여 핫 배포보다 더 많은 경우를 처리합니다 .

  • 방법 추가 / 제거
  • 생성자 추가 / 제거
  • 인터페이스 변경
  • 구현 된 인터페이스 추가 / 제거

그것은이다 상업 ( 가격 정보 2018년 6월에서 $ (550) / 년), 그리고의 제비가 플러그인 타사 프레임 워크를 포함를 들어 :

  • Guice
  • 스트럿 2

당신은 얻을 무료 평가판을 매우 고통 - 난 당신에게 주사를 제안한다.


2
Jrebel, 작동하면 작동합니다. 그렇지 않으면 악몽입니다. 나는 일주일 이상 그들의 지원으로 머리를 치고 있었지만 여전히 간단한 봄 mvc 설정에서 작동하지 않습니다. 내 앱이나 내 앱의 helloworld를 보내지 않으면 더 이상 도움이되지 않습니다. 그리고 가격이 오래되었습니다. 이제 폭탄을 충전합니다. 감사합니다 나는 그들의 평가판을 사용했습니다
happybuddha 2014-06-03

현재 가격은 좌석 당 연간 $ 365입니다
Joseph Lust

그리고 이제 좌석 당 연간 $ 550
frewper

3

Eclipse에서 작업 공간을 \ tomcat \ webapps로 변경하십시오. 작업용이므로 제대로 작동합니다. Eclipse에서 변경 한 사항은 Tomcat이 배포 할 응용 프로그램을 찾는 동일한 디렉토리에 있습니다.


3

서버보기에서 새 서버를 만들고 아직 서버에 리소스 (프로젝트)를 추가하지 마십시오. 서버 위치에서 서버를 두 번 클릭하십시오. "Tomcat 설치 사용"을 선택합니다. "배포 경로"를 tomcat 배포 디렉터리 (예 : c : \ server \ Tomcat 7.0.14 \ webapps)로 수정합니다. "게시 섹션"을 확장하십시오. "빌드 이벤트 후 자동으로 게시"를 선택합니다. 저장하고 닫습니다. 이클립스 메뉴에서 "프로젝트-> 자동 빌드"를 선택하십시오. 서버보기에서 서버를 마우스 오른쪽 버튼으로 클릭하고 "추가 및 제거"를 클릭하고 프로젝트를 게시합니다.


2

이것이 단지 개발을위한 것이라면 왜 in Eclipse에서 통합 된 tomcat 서버를 사용하지 않는가? window-> preferences에서 서버를 구성 할 수 있습니다. page.jsp라는 jsp가있는 경우 구성되면 마우스 오른쪽 단추로 클릭하고 서버에서 실행을 선택할 수 있습니다. 기본 설정-> 일반-> 웹 브라우저에서 내장 브라우저 또는 외부 브라우저를 사용할 날씨를 선택할 수 있습니다. jsp를 일부 변경하고 브라우저에서 페이지를 저장하고 새로 고칩니다. 브라우저를 저장하고 새로 고치면 변경 사항이 자동으로 반영됩니다.


2

여기서 나를 위해 작동하는 것은 다음과 같습니다.

context.xml은 다음과 같습니다.

<Context path="/myapp" docBase="myapp" debug="5"
    reloadable="false" antiResourceLocking="false" antiJARLocking="true">
<!-- this because i´m using Spring 3.1 with Tomcat -->
    <Loader     loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" />

</Context>

그런 다음 Eclipse의 Servers 탭, "Modules"탭에서 배포중인 모든 모듈에 대해 "Auto Reload"를 비활성화했습니다.

또한 자동 게시를 허용하도록 기본 구성을 사용하십시오.

그리고 WTP와 함께 Maven을 사용하고 있으므로, Eclipse는 최종 빌드에서이 폴더의 내용을 제외하도록 고집하므로 src / main / resources의 내용을 그대로 두는 것을 잊지 마십시오.

이 모든 것을 통해서만 전체 (VM) 클래스를 핫 배포 리소스로 핫 배포했습니다 !!!


1

개발 환경에서 Tomcat 서버가 JSP를 개발중인 디렉토리에서 찾도록 지정하면됩니다. 파일을 저장하자마자 변경 사항을 볼 수 있습니다.


1

Spring Loaded JVM 에이전트를 사용하여 개발 환경에서이 작업을 수행했습니다 . 내가 Spring 웹 애플리케이션을 개발하는 동안 그 프로젝트의 설명은 그것이

JVM에서 실행할 수있는 모든 바이트 코드에서 사용 가능

다음 설정을 사용하여 연결된 Tomcat 인스턴스 (일반적인 Eclipse WTP 방법)에 자동으로 게시하도록 변경 사항을 가져올 수있었습니다. Eclipse Mars.2 (4.5.2)를 기반으로하는 Spring Tool Suite 3.7.3을 사용하고 있습니다.

  1. Github 프로젝트 에서 Spring Loaded의 최신 릴리스 JAR을 다운로드하십시오 . 이것은 springloaded-1.2.5.RELEASE.jar로 테스트되었습니다.
  2. Eclipse에서 Tomcat 서버를 정상적으로 설정 (Tomcat 8.0.30으로 테스트)
  3. Eclipse에서 Tomcat 서버의 구성 페이지를 엽니 다 ( "서버"탭에서 서버 인스턴스를 두 번 클릭).
  4. "서버 옵션"섹션에서 "기본적으로 모듈 자동 다시로드"를 선택 취소합니다.
    • 참고 : 이미 서버에 웹 모듈을 추가 한 경우 "모듈"탭 (구성 페이지 창 하단)을 통해 개별적으로 "자동 다시로드"를 비활성화해야 할 수 있습니다.
  5. "일반 정보"섹션에서 "실행 구성 열기"를 클릭하십시오.
    • "Arguments"탭에서 "VM arguments"끝에 다음을 추가합니다. -javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
    • 프로젝트 .class파일과 함께 JAR을 감시 할 수 있도록하려면 이 문제의 댓글에 따라 -Dspringloaded=watchJars=VM 인수를 구성합니다 .

서버를 시작하고 평소와 같이 동적 웹 애플리케이션 프로젝트를 게시하십시오. 다시 말하지만 저는 Spring 웹 애플리케이션으로 이것을 테스트 할 수있었습니다. 예를 들어, @Controller 클래스의 코드 수정, 메서드 추가 / 빼기 등은 파일을 저장하고 Eclipse가 변경된 클래스를 빌드하고 게시 한 후 거의 즉시 적용되었습니다. 마지막으로, Spring Loaded 프로젝트의 FAQ 섹션에서는 상황이 다시로드되지 않는 몇 가지 경우를 언급 했으므로 서버 / 애플리케이션을 다시 시작해야합니다. 그러나 이러한 예외는 훨씬 덜 빈번합니다.

참고 사항 : STS와 함께 제공되는 내장형 Pivotal tc 서버 또는 VMware vFabric tc 서버에서는 작동하지 않습니다. 이러한 서버의 경우 "Enable Java Agent-based reloading (experimental)"옵션이 있지만 Spring Loaded의 이전 1.2.0 릴리스를 사용합니다.


꼭 받아 들여야 할 것 같은데 Spring, Non Spring신청 은 어때 ?
Tangoo

Tomcat 용으로 SpringLoaded JAR을 구성해야하지만 실행중인 애플리케이션 자체가 Spring 애플리케이션 일 필요는 없습니다 (Spring JAR을 포함하지 않아도 됨). 간단한 단일 HelloWorld Servlet으로 이것을 성공적으로 테스트했습니다.
martian111

0

개발 목적으로 Jetty를 사용할 수 있습니까?

그렇다면 Maven과 함께 사용하는 것은 매우 간단합니다. mvn jetty:run


0

이것이 최선의 방법은 아니지만 저에게는 효과적입니다.

  • $ tomcat / conf / Catalina / localhost / .xml
  • $ contextPath / webapp / web / WEB-INF / lib / *. jar
  • $ contextPath / webapp / web /
  • $ eclispeWorkbench / project-servlet / src /
  • $ eclispeWorkbench / project-servlet / servlet.jardesc ($ contextPath의 lib dir에 jar를 내 보내야 함)
  • $ eclipseWorkbench / project-jsp /

rsync 명령을 사용하여 jsp 프로젝트의 변경 사항을 $ contextPath로 동기화합니다.

Eclipse에서 Tomcat 용 원격 디버깅을 사용하면 코드 핫스왑이 제한됩니다. 정적 필드를 변경하거나 메소드를 추가하는 경우 jar를 내보내고 컨텍스트를 다시 시작해야합니다.


0

아래 옵션을 사용할 수 있습니까? Eclipse에서 서버-> 서버 위치-> Tomcat 설치 사용을 두 번 클릭하십시오. Tomcat 설치를 제어합니다. Java 클래스를 변경하기 위해 서버를 다시 시작할 필요가 없습니다.


0

가장 간단한 방법을 찾았습니다. 심볼릭 링크 사용 : 동기화가 전혀 없기 때문에 이것이 가장 빠른 방법이라고 생각합니다. tomcat 디렉터리와 프로젝트 디렉터리는 항상 동일한 디렉터리입니다.

Tomcat은 주기적으로 변경 사항을 감지하고 애플리케이션을 재배포합니다.

응용 프로그램을 디버깅하는 방법도 있으므로 겸손하게 좋은 해결책이라고 생각합니다.

관심있는 사람을 위해 여기에 내 솔루션을 문서화했습니다 .


로컬 호스트를 사용하고 있기 때문에 원격 Java 응용 프로그램을 사용해야하는 이유를 알 수 있습니까? 로컬 컴퓨터를 사용하여 디버깅 중임을 의미합니다.
Karen Goh

0

서둘러야 할 경우 :

  1. Eclipse의 tomcat (다른 컨테이너)에서 "자동으로 게시하지 않음"을 확인하십시오.
  2. 디버그 모드에서 tomcat (다른 컨테이너)를 시작합니다.

짜잔! :)


0

Eclipse에서 상단 메뉴의 프로젝트를 클릭하고 "자동으로 빌드"가 선택되어 있는지 확인합니다. 이것은 내 문제를 해결했습니다. 내 작업 공간 메타 데이터를 사용하여 Tomcat과 함께 Eclipse를 실행하고있었습니다. 또한 Dynamic Web Module 프로젝트에서 Maven을 실행하고있었습니다. 확인하려면 애플리케이션을 Tomcat에 추가하십시오. Eclipse 내에서 Tomcat을 시작합니다. 애플리케이션이 배포되고 실행 중인지 확인합니다. Eclipse에서 콘솔 탭을 엽니 다. 응용 프로그램을 변경하십시오. 몇 초 후에 변경 사항이 자동으로 빌드되고 Tomcat에 배포되는 것을 볼 수 있습니다.


-2

가장 간단하고 빠르다 : 빌드 할 때 WAR 파일을 생성하도록 Eclipse를 설정합니다. 빌드 후 단계로 해당 WAR 파일을 tomcat webapps 디렉토리에 복사하십시오. Tomcat은 변경 사항을 인식하고 배포 할 필요없이 사이트를 새로 고칩니다. 이것은 완벽하지 않습니다. 해당 웹앱을 사용하는 사용자는 Tomcat이 웹앱 "아래"를 다시 시작하므로 최적의 경험이 아닐 수 있습니다. 그러나 이것은 귀하의 요청에 맞습니다.


1
알았어 ... 내 의도를 분명히하지 않았나 봐. 나는 정말로 일부 사용자에게 앱을 배포하는 데 관심이 없지만 일상적인 개발 요구 사항을 위해 이클립스로 바람둥이를 실행하고 (Make change)-> (결과보기)의 피드백주기를 단축하려고합니다. 변경) -> 배포 -> (참조 결과)
udit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.