Intellij 커뮤니티 버전에서 JBoss 사용하기
문제 발생
회사에서 레거시 프로젝트를 진행하게 될 일이 생겼는데, 해당 프로젝트는 Spring framework(SpringBoot가 아니다...) + Maven + JBoss를 사용한다고 하였다. 나는 Intellij 커뮤니티 버전을 사용하고 있는데, JBoss 연동하는 기능은 유료에서만 사용할 수 있다고 나오더라.
내 환경은 다음과 같았다.
- JBoss WildFly Full 9.0.2.Final (WildFly Core 1.0.2.Final)
- Java 8
- Spring 5.3.32
- IntelliJ IDEA 2024.1.1 (Community Edition)
문제 해결
프로젝트 배포하기
우선 스프링 프로젝트를 빌드하고, JBoss의 deployments 폴더에 이동하기로 했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<name>TEST</name>
<packaging>war</packaging>
<version>1.0.0</version>
<profiles>
<profile>
<id>local</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<outputDirectory>${JBOSS_DEPLOYMENTS_PATH}</outputDirectory>
<attachClasses>true</attachClasses>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<!-- 기존 코드들 -->
</project>
작성한 pom.xml
내용을 살펴보면 profiles.profile.id
를 local
이라고 지정하였다. 지정한 이 이름으로 프로젝트를 빌드할 때 프로필을 적용할 수 있다. 그 다음에 상단에 구성 편집
을 선택해서 새 구성을 생성한다. (본인은 이미 생성해둬서 있다.)
그 후 새 구성 추가
- Maven
을 누른다.
그 후 아래와 같이 내용을 작성한다.
- 실행 명령줄 :
war:war
- 프로파일 :
local
(pom.xml
에서profiles.profile.id
에 지정한 값)
그 후 저장한 뒤 해당 실행 구성을 시작한다.
그러면 메이븐으로 빌드가 실행되고, 지정한 폴더에 test.war
와 test-classes.jar
가 생긴다.
JBoss 실행
JBoss 실행은 간단하다. JBoss/bin
폴더에 있는 standalone.bat
파일을 실행시키면 된다. 나는 Intellij내부에서 간편하게 관리하기 위해 실행 구성에 해당 내용을 등록했다.
이미지에서 ${JBOSS_BIN_PATH}
를 JBoss/bin
폴더 경로로 변경하여 작성하면 된다. 그 후 터미널에서 실행
옵션을 제외했다. 그 후 실행하면 Intellij 내부에서 실행 로그를 볼 수 있다. 다만 이 상태로는 Grep Console과 같은 확장 프로그램은 적용이 안되는 것으로 보이는데 해결방법은 찾지 못했다. 😢
org.jboss.modules.ModuleNotFoundException: jdk.unsupported:main 오류
다만 나는 여기까지 했음에도 정상적으로 페이지에 접속할 수 없었다. JBoss 서버 로그를 살펴보니 약간 위쪽에 아래와 같은 오류가 나고 있었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18:58:04,899 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC000001: Failed to start service jboss.module.service."deployment.test.war".main: org.jboss.msc.service.StartException in service jboss.module.service."deployment.test.war".main: JBAS018759: Failed to load module: deployment.test.war:main
at org.jboss.as.server.moduleservice.ModuleLoadService.start(ModuleLoadService.java:91) [wildfly-server-8.1.0.Final.jar:8.1.0.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [rt.jar:1.8.0_342]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [rt.jar:1.8.0_342]
at java.lang.Thread.run(Thread.java:750) [rt.jar:1.8.0_342]
Caused by: org.jboss.modules.ModuleNotFoundException: jdk.unsupported:main
at org.jboss.modules.Module.addPaths(Module.java:1050) [jboss-modules.jar:1.3.3.Final]
at org.jboss.modules.Module.link(Module.java:1406) [jboss-modules.jar:1.3.3.Final]
at org.jboss.modules.Module.relinkIfNecessary(Module.java:1434) [jboss-modules.jar:1.3.3.Final]
at org.jboss.modules.ModuleLoader.loadModule(ModuleLoader.java:242) [jboss-modules.jar:1.3.3.Final]
at org.jboss.as.server.moduleservice.ModuleLoadService.start(ModuleLoadService.java:70) [wildfly-server-8.1.0.Final.jar:8.1.0.Final]
... 5 more
18:58:04,904 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) JBAS014613: Operation ("deploy") failed - address: ([("deployment" => "test.war")]) - failure description: {"JBAS014671: Failed services" => {"jboss.module.service.\"deployment.test.war\".main" => "org.jboss.msc.service.StartException in service jboss.module.service.\"deployment.test.war\".main: JBAS018759: Failed to load module: deployment.test.war:main
Caused by: org.jboss.modules.ModuleNotFoundException: jdk.unsupported:main"}}
확인해보면 jdk.unsupported:main
관련해서 모듈을 찾을 수 없다고 오류가 나는데, 의존성 오류가 나는것으로 보였다. 관련 내용을 찾아보니 해결 방법은 3가지라고 한다.
- 디펜던시에
jdk.unsupported
를 사용하는 모듈을 제거나 변경한다. - JBoss Wildfly의 버전을 업데이트한다.
- 가짜
jdk.unsupported
모듈을 만든다.
해당 프로젝트는 회사에서 업무로 진행하던 프로젝트라 나 혼자 설정을 바꿀 수 없어 일단은 3번 방법을 채택했다.
${JBOSS_PATH}/modules/system/layers/base/jdk/unsupported/main/module.xml
파일을 생성하고 아래 내용을 저장한다.
1
2
3
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.5" name="jdk.unsupported">
</module>
이렇게 모든 설정을 마친 후 JBoss를 재실행하니 드디어 로그인 페이지에 접속할 수 있었다.