Intellij 커뮤니티 버전에서 JBoss 사용하기

2024년 8월 29일 목요일
8분 소요
0회

문제 발생

회사에서 레거시 프로젝트를 진행하게 될 일이 생겼는데, 해당 프로젝트는 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 폴더에 이동하기로 했다.

xml

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.idlocal이라고 지정하였다. 지정한 이 이름으로 프로젝트를 빌드할 때 프로필을 적용할 수 있다. 그 다음에 상단에 구성 편집을 선택해서 새 구성을 생성한다. (본인은 이미 생성해둬서 있다.)

how-to-use-jboss-in-intellij-community-1

그 후 새 구성 추가 - Maven 을 누른다.

how-to-use-jboss-in-intellij-community-2

그 후 아래와 같이 내용을 작성한다.

  • 실행 명령줄 : war:war
  • 프로파일 : local (pom.xml에서 profiles.profile.id에 지정한 값)

how-to-use-jboss-in-intellij-community-3

그 후 저장한 뒤 해당 실행 구성을 시작한다.

how-to-use-jboss-in-intellij-community-4

그러면 메이븐으로 빌드가 실행되고, 지정한 폴더에 test.wartest-classes.jar가 생긴다.

JBoss 실행

JBoss 실행은 간단하다. JBoss/bin폴더에 있는 standalone.bat 파일을 실행시키면 된다. 나는 Intellij내부에서 간편하게 관리하기 위해 실행 구성에 해당 내용을 등록했다.

how-to-use-jboss-in-intellij-community-5

이미지에서 ${JBOSS_BIN_PATH}JBoss/bin폴더 경로로 변경하여 작성하면 된다. 그 후 터미널에서 실행옵션을 제외했다. 그 후 실행하면 Intellij 내부에서 실행 로그를 볼 수 있다. 다만 이 상태로는 Grep Console과 같은 확장 프로그램은 적용이 안되는 것으로 보이는데 해결방법은 찾지 못했다. 😢

org.jboss.modules.ModuleNotFoundException: jdk.unsupported:main 오류

다만 나는 여기까지 했음에도 정상적으로 페이지에 접속할 수 없었다. JBoss 서버 로그를 살펴보니 약간 위쪽에 아래와 같은 오류가 나고 있었다.

java

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가지라고 한다.

  1. 디펜던시에 jdk.unsupported를 사용하는 모듈을 제거나 변경한다.
  2. JBoss Wildfly의 버전을 업데이트한다.
  3. 가짜 jdk.unsupported모듈을 만든다.

해당 프로젝트는 회사에서 업무로 진행하던 프로젝트라 나 혼자 설정을 바꿀 수 없어 일단은 3번 방법을 채택했다.

${JBOSS_PATH}/modules/system/layers/base/jdk/unsupported/main/module.xml파일을 생성하고 아래 내용을 저장한다.

xml

1

2

3

<?xml version="1.0" encoding="UTF-8"?>
 <module xmlns="urn:jboss:module:1.5" name="jdk.unsupported">
</module>

이렇게 모든 설정을 마친 후 JBoss를 재실행하니 드디어 로그인 페이지에 접속할 수 있었다.


Loading reactions

© 2024 Hopoduck. All rights reserved.