[JBoss EAP 7] ์„ค์น˜ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ: java.lang.UnsupportedClassVersionError (JDK ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ)

JBoss EAP 7 ์„ค์น˜ ๋˜๋Š” ๊ธฐ๋™ ์ค‘ java.lang.UnsupportedClassVersionError๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ํ˜„์žฌ ์„œ๋ฒ„์— ์„ค์ •๋œ Java ๋ฒ„์ „์ด JBoss๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ตœ์†Œ ์‚ฌ์–‘(JDK 1.8)๋ณด๋‹ค ๋‚ฎ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์˜ major.minor version ์ˆซ์ž๋ฅผ ํ†ตํ•ด ์›์ธ์„ ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

1. ๋ฌธ์ œ ํ˜„์ƒ ๋ฐ ์›์ธ ๋ถ„์„

JBoss ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์‹œ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ ๋กœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋˜๋ฉฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

Exception in thread "main" java.lang.UnsupportedClassVersionError: 
com/ibm/websphere/... : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    ...

์›์ธ (Root Cause)

์ด ์—๋Ÿฌ๋Š” ์ปดํŒŒ์ผ๋œ ํด๋ž˜์Šค ํŒŒ์ผ์˜ ๋ฒ„์ „(Target JVM)๋ณด๋‹ค ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ JVM ๋ฒ„์ „(Runtime)์ด ๋‚ฎ์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • JBoss EAP 7.x ์š”๊ตฌ์‚ฌํ•ญ: ์ตœ์†Œ JDK 1.8 ์ด์ƒ
  • ํ˜„์žฌ ์„œ๋ฒ„ ์ƒํ™ฉ: JDK 1.7 ์ดํ•˜๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๊ฑฐ๋‚˜ JAVA_HOME์ด ๊ตฌ๋ฒ„์ „์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Œ

2. ๋ฒ„์ „ ๋งคํ•‘ ํ…Œ์ด๋ธ” (Class File Format)

์—๋Ÿฌ ๋ฉ”์‹œ์ง€์— ๋œจ๋Š” ์ˆซ์ž(52.0, 51.0 ๋“ฑ)๋Š” Java ํด๋ž˜์Šค ํŒŒ์ผ ํฌ๋งท์˜ ๋ฉ”์ด์ € ๋ฒ„์ „์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ํ‘œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ˜„์žฌ ํ•„์š”ํ•œ Java ๋ฒ„์ „์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

Java Version (SE) Major Version (Hex) Major Version (Dec)
Java 14 0x3A 58
Java 13 0x39 57
Java 12 0x38 56
Java 11 0x37 55
Java 9 0x35 53
Java 8 0x34 52
Java 7 0x33 51
Java 6 0x32 50
๋ถ„์„ ์˜ˆ์‹œ:
์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ Unsupported major.minor version 52.0์ด๋ผ๋ฉด, ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์€ Java 8๋กœ ์ปดํŒŒ์ผ๋˜์—ˆ์œผ๋ฏ€๋กœ ์„œ๋ฒ„์—๋„ Java 8 ์ด์ƒ์ด ์„ค์น˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (Solution)

1) ํ˜„์žฌ Java ๋ฒ„์ „ ํ™•์ธ

java -version

์ถœ๋ ฅ ๊ฒฐ๊ณผ๊ฐ€ 1.7.x ์ดํ•˜๋ผ๋ฉด JDK ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

2) JDK ์„ค์น˜ ๋ฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ณ€๊ฒฝ

์„œ๋ฒ„์— JDK 1.8 ์ด์ƒ์„ ์„ค์น˜ํ•œ ํ›„, JBoss๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์—์„œ JAVA_HOME ๊ฒฝ๋กœ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Standalone ๋ชจ๋“œ: [EAP_HOME]/bin/standalone.conf (Windows๋Š” .bat)
  • Domain ๋ชจ๋“œ: [EAP_HOME]/bin/domain.conf (Windows๋Š” .bat)
# standalone.conf ์˜ˆ์‹œ
# JAVA_HOME="/usr/lib/jvm/java-1.7.0"  <-- ๊ธฐ์กด (์ฃผ์„ ์ฒ˜๋ฆฌ)
JAVA_HOME="/usr/lib/jvm/java-1.8.0"    <-- ์‹ ๊ทœ ๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝ

Next Step:
JDK ๋ฒ„์ „์„ ์˜ฌ๋ฆฐ ํ›„์—๋Š” ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(WAR/EAR)์ด ์ƒˆ Java ๋ฒ„์ „์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€, -Xmx ๋“ฑ ๋ฉ”๋ชจ๋ฆฌ ์˜ต์…˜์ด ๋ณ€๊ฒฝ๋œ ๋ฒ„์ „์— ๋งž๊ฒŒ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.