본문으로 건너뛰기

6.4 다이내믹 모듈(배포 모듈)에 명시적 의존성 추가하기

다이내믹 모듈은 배포의 MANIFEST.MF 또는 jboss-deployment-structure.xml 디스크립터에 의존성을 선언할 수 있다. 애플리케이션에 명시적 의존성을 추가하는 방법을 설명한다. 명시적인 모듈 의존성을 애플리케이션에 추가하면 이 모듈의 클래스를 애플리케이션의 클래스 패스에 추가 할 수 있다.

의존성을 설정하는 방법은 두 가지가 있다.

  1. 배포 애플리케이션의 MANIFEST.MF 파일에 항목을 추가한다.
  2. jboss-deployment-structure.xml 배포 디스크립터에 항목을 추가한다.

MANIFEST.MF 의존성 추가 방법

MANIFEST.MF 파일에 필요한 의존성 항목을 만들 수 있다.

따라하기

  1. MANIFEST.MF 파일 추가
  2. 의존성 항목 추가
  1. MANIFEST.MF 파일 추가

    프로젝트에 MANIFEST.MF 파일이 없으면 MANIFEST.MF 라는 파일을 만든다. 웹 애플리케이션(WAR)에서 이 파일을 WEB-INF 디렉터리에 추가한다. EJB 아카이브(JAR)는 META-INF 디렉터리에 추가한다.

  2. 의존성 항목 추가 의존성 모듈 이름을 쉼표로 구분하여 의존성 항목을 MANIFEST.MF 파일에 추가한다. Dependencies : org.javassist, org.apache.velocity

    • 옵션 : 의존성을 선택한다 의존성 항목 모듈로 optional 을 지정하면 의존성을 옵션으로 할 수 있다. Dependencies : org.javassist optional, org.apache.velocity
    • 옵션 : 의존성 익스포트 의존성 항목 모듈로 export 를 지정하면 의존성을 내보낼 수 있다. Dependencies: org.javassist, org.apache.velocity export

jboss-deployment-structure.xml 의존성 추가 방법

jboss-deployment-structure.xml 배포 디스크립터는 클래스 로딩을 제어 할 수 있는 새로운 디스크립터이다. 이 디스크립터는 배포 애플리케이션의 META-INF/디렉터리 또는 WEB-INF/디렉터리에 있으면 된다. 암시적 의존성 모듈이 추가되지 않도록 하는 기능, 추가되지 않은 의존성을 추가하는 기능, 추가 모듈의 정의, EAR의 클래스 로딩의 동작 변경, 모듈에 리소스 경로를 추가하는 기능 등 다양한 기능이 있다.

배포 디스크립터파일의 의존성을 추가하면 JBoss EAP 6에서 애플리케이션 배포시 지정된 모듈의 JAR 파일들을 애플리케이션의 클래스 패스에 클래스를 추가한다.

다음은 jboss-deployment-structure.xml 의존성 추가 방법이다,

따라해보기

  1. jboss-deployment-structure.xml 추가
  2. 의존성 섹션 추가
  3. 모듈 요소 추가
  1. MANIFEST.MF 파일 추가

    애플리케이션에 jboss-deployment-structure.xml 라는 새 파일을 만들어 프로젝트에 추가한다. 이 파일은 <jboss-deployment-structure> 이 루트인 XML 파일이다.

    <jboss-deployment-structure>

    </jboss-deployment-structure>

    웹 애플리케이션(WAR)에서는 이 파일을 WEB-INF 에 추가하고, EJB 아카이브(JAR)은 META-INF 디렉터리에 추가한다.

  2. 의존성 섹션 추가 <deployment>를 문서 루트에 생성하고 그 안에 <dependencies> 엘리먼트를 만든다.

  3. 모듈 요소 추가 의존성 노드에 각 모듈 의존성에 대한 모듈 엘리먼트를 추가한다. name 에 모듈의 이름으로 지정한다. <module name="org.javassist" />

    • 옵션 : 의존성을 선택한다 모듈에 optional 속성을 추가하면 의존성을 옵션으로 지정할 수 있다. 이 속성의 기본값은 FALSE 이다. <module name="org.javassist" optional="TRUE" />
    • 옵션 : 의존성 익스포트 모듈에 export속성을 추가하면 의존성을 의존성을 사용하는 모듈에서도 사용할 수 있도록 한다. 이 속성의 기본값은 FALSE 이다. 다음이 완성된 XML 설정파일이다.
    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-deployment-structure>
    <deployment>
    <dependencies>
    <module name="org.javassist" />
    <module name="org.apache.velocity" export="TRUE" />
    </dependencies>
    </deployment>
    </jboss-deployment-structure>

모듈이 암시적으로 로드되지 않도록 설정

다음에서는 모듈 의존성 목록에서 제외하도록 애플리케이션을 설정하는 방법을 설명한다.

배포 가능한 애플리케이션을 설정하여 암시적 의존성으로 로드되지 않도록 할 수 있다. 이것은 JBoss EAP 6에서 제공되는 암시적 의존성은 일반적으로 다른 버전의 라이브러리를 사용하거나 프레임 워크가 애플리케이션에 포함되는 경우 사용한다.

따라해보기

  1. jboss-deployment-structure.xml 작성
  2. <exclusions> 엘리먼트 작성
  3. exclusions 요소에 제외 모듈 등록
  1. jboss-deployment-structure.xml 작성
    애플리케이션에 jboss-deployment-structure.xml 라는 새 파일을 만들어 프로젝트에 추가한다. 이 파일은 <jboss-deployment-structure> 이 루트인 XML 파일이다.
<jboss-deployment-structure>
</jboss-deployment-structure>

웹 애플리케이션(WAR)에서이 파일을 WEB-INF 에 추가하고, EJB 아카이브 (JAR)은 META-INF 디렉터리에 추가한다.

  1. <exclusions> 엘리먼트 작성 <deployment>를 문서 루트에 생성하고 그 안에 <exclusions>를 만든다.
<deployment>
<exclusions>
</exclusions>
</deployment>
  1. exclusions 요소에 제외 모듈 등록 exclusions 에 제외할 각 모듈에 대해 <module>을 추가한다. name에 제외할 모듈의 이름으로 설정한다. <module name="org.javassist" />

    다음이 완성된 설정파일이다.

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-deployment-structure>
    <deployment>
    <exclusions>
    <module name="org.javassist" />
    <module name="org.dom4j" />
    </exclusions>
    </deployment>
    </jboss-deployment-structure>

배포시 서브시스템을 제외하도록 설정

배포 시에 서브 시스템을 제외시키기 위해 필요한 단계에 대해 설명한다. 이 작업은 jboss-deployment-structure.xml 설정 파일을 편집한다. 서브시스템을 제외하는 것은 서브시스템을 제거하는 것과 같은 효과가 있지만, 하나의 배포파일에만 적용된다.

따라해보기

  1. jboss-deployment-structure.xml 편집
  2. <exclusions> 엘리먼트 작성
  1. jboss-deployment-structure.xml 편집 텍스트 편집기에서 jboss-deployment-structure.xml 파일을 연다.

  2. <exclusions> 엘리먼트 작성 <deployment> 태그 안에 다음과 같은 추가한다.

<exclude-subsystems>
<subsystem name="SUBSYSTEM_NAME" />
</exclude-subsystems>

파일을 저장한다.

위와 같이 설정하면 애플리케이션 배포시 서브 시스템이 제외된다. 서브시스템 배포시 더 이상 실행되지 않게 된다.

다음은 앞서 설명한 내용들이 들어 있는 jboss-deployment-structure.xml파일이다.

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<ear-subdeployments-isolated>true</ear-subdeployments-isolated>
<deployment>
<exclude-subsystems>
<subsystem name="resteasy"/>
</exclude-subsystems>
<exclusions>
<module name="org.javassist"/>
</exclusions>
<dependencies>
<module name="deployment.javassist.proxy"/>
<module name="deployment.myjavassist"/>
<module name="myservicemodule" services="import"/>
</dependencies>
<resources>
<resource-root path="my-library.jar"/>
</resources>
</deployment>
<sub-deployment name="myapp.war">
<dependencies>
<module name="deployment.myear.ear.myejbjar.jar"/>
</dependencies>
<local-last value="true"/>
</sub-deployment>
<module name="deployment.myjavassist">
<resources>
<resource-root path="javassist.jar">
<filter>
<exclude path="javassist/util/proxy"/>
</filter>
</resource-root>
</resources>
</module>
<module name="deployment.javassist.proxy">
<dependencies>
<module name="org.javassist">
<imports>
<include path="javassist/util/proxy"/>
<exclude path="/**"/>
</imports>
</module>
</dependencies>
</module>
</jboss-deployment-structure>