Server/Tomcat

Tomcat7 JSP파일에서 Java7 기능 사용하기 (Ubuntu)

DrumRobot 2014. 3. 3. 10:21
반응형

Java7에서는 switch문에 문자열 사용이 가능하고 multi-catch문 등 매력적인 기능들을 포함하고 있는데요,

Tomcat7 + JRE7을 사용하면 이러한 기능들을 사용하실 수 있습니다.

그런데 막상 JSP 파일에 이러한 기능들을 넣어봤더니 오류 발생..?!

Tomcat 소스와 eclipse JDT 소스에 break포인트를 걸어가며 겨우 겨우 알아낸 사실은,

Tomcat은 JSP 컴파일에 eclipse JDT에 포함된 컴파일러를 사용하는데 JVM level의 기본값이 1.6으로 되어있다는..

그래서 먼저 서버의 web.xml에서 다음과 같이 JspServlet에 파라미터를 주었습니다.

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>compilerSourceVM</param-name>
        <param-value>1.7</param-value>
    </init-param>
    <init-param>
        <param-name>compilerTargetVM</param-name>
        <param-value>1.7</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

그랬더니, Window7에서 Eclipse로 tomcat-7.0.52를 돌렸을 때는 JSP의 Java7 기능이 정상적으로 컴파일 되었습니다.

하지만,, 우분투에서 했더니 또 안되더라는...

오랜 사투 끝에 알아낸 이유는, ecj 3.7.2 버전부터 Java7을 지원하는데 Window용 Tomcat7은 lib폴더에 그 이상의 ecj를 포함하고 있어서 문제가 없었던 것입니다.

하지만 우분투에서는 /usr/share/java/ecj.jar를 사용하고 있고, 이 파일이 /usr/share/java/eclipse-ecj-3.5.1.jar을 참조하고 있었습니다. (12.04 LTS 기준)

해결 방법:

윈도우용 Tomcat의 lib 폴더에 있는 ecj-3.7.2.jar 이상의 파일을 우분투의 /usr/share/java/ 폴더에 넣습니다.

tomcat-7.0.55에 포함된

ecj-4.4.jar
다운로드

파일입니다.

ecj-4.4.jar을 올렸다면 다음과 같은 명령어로 심볼릭 링크를 다시 만듭니다.

ln -sf /usr/share/java/ecj-4.4.jar /usr/share/java/ecj.jar

* 그래도 안 될 경우 /etc/default/tomcat7 파일에서 JAVA_HOME을 설정

반응형

'Server > Tomcat' 카테고리의 다른 글

우분투 톰캣6 버전 확인  (0) 2014.02.13