6.4 다이내믹 모듈(배포 모듈)에 명시적 의존성 추가하기
다이내믹 모듈은 배포의 MANIFEST.MF 또는 jboss-deployment-structure.xml 디스크립터에 의존성을 선언할 수 있다. 애플리케이션에 명시적 의존성을 추가하는 방법을 설명한다. 명시적인 모듈 의존성을 애플리케이션에 추가하면 이 모듈의 클래스를 애플리케이션의 클래스 패스에 추가 할 수 있다.
의존성을 설정하는 방법은 두 가지가 있다.
- 배포 애플리케이션의 MANIFEST.MF 파일에 항목을 추가한다.
- jboss-deployment-structure.xml 배포 디스크립터에 항목을 추가한다.
MANIFEST.MF 의존성 추가 방법
MANIFEST.MF 파일에 필요한 의존성 항목을 만들 수 있다.
따라하기
- MANIFEST.MF 파일 추가
- 의존성 항목 추가
-
MANIFEST.MF 파일 추가
프로젝트에 MANIFEST.MF 파일이 없으면 MANIFEST.MF 라는 파일을 만든다. 웹 애플리케이션(WAR)에서 이 파일을 WEB-INF 디렉터리에 추가한다. EJB 아카이브(JAR)는 META-INF 디렉터리에 추가한다.
-
의존성 항목 추가 의존성 모듈 이름을 쉼표로 구분하여 의존성 항목을 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 의존성 추가 방법이다,
따라해보기
- jboss-deployment-structure.xml 추가
- 의존성 섹션 추가
- 모듈 요소 추가
-
MANIFEST.MF 파일 추가
애플리케이션에 jboss-deployment-structure.xml 라는 새 파일을 만들어 프로젝트에 추가한다. 이 파일은
<jboss-deployment-structure>이 루트인 XML 파일이다.<jboss-deployment-structure></jboss-deployment-structure>웹 애플리케이션(WAR)에서는 이 파일을 WEB-INF 에 추가하고, EJB 아카이브(JAR)은 META-INF 디렉터리에 추가한다.
-
의존성 섹션 추가
<deployment>를 문서 루트에 생성하고 그 안에<dependencies>엘리먼트를 만든다. -
모듈 요소 추가 의존성 노드에 각 모듈 의존성에 대한 모듈 엘리먼트를 추가한다. 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> - 옵션 : 의존성을 선택한다
모듈에 optional 속성을 추가하면 의존성을 옵션으로 지정할 수 있다. 이 속성의 기본값은 FALSE 이다.
모듈이 암시적으로 로드되지 않도록 설정
다음에서는 모듈 의존성 목록에서 제외하도록 애플리케이션을 설정하는 방법을 설명한다.
배포 가능한 애플리케이션을 설정하여 암시적 의존성으로 로드되지 않도록 할 수 있다. 이것은 JBoss EAP 6에서 제공되는 암시적 의존성은 일반적으로 다른 버전의 라이브러리를 사용하거나 프레임 워크가 애플리케이션에 포함되는 경우 사용한다.
따라해보기
- jboss-deployment-structure.xml 작성
<exclusions>엘리먼트 작성- exclusions 요소에 제외 모듈 등록
- 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 디렉터리에 추가한다.
<exclusions>엘리먼트 작성<deployment>를 문서 루트에 생성하고 그 안에<exclusions>를 만든다.
<deployment>
<exclusions>
</exclusions>
</deployment>
-
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 설정 파일을 편집한다. 서브시스템을 제외하는 것은 서브시스템을 제거하는 것과 같은 효과가 있지만, 하나의 배포파일에만 적 용된다.
따라해보기
- jboss-deployment-structure.xml 편집
<exclusions>엘리먼트 작성
-
jboss-deployment-structure.xml 편집 텍스트 편집기에서 jboss-deployment-structure.xml 파일을 연다.
-
<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>