내용 목차
본 장에서는 Ant Task에 대해서 설명한다.
JEUS에서는 애플리케이션을 개발하면서 특정 작업을 자동하기 위해 다음과 같은 Ant Task를 제공한다. 사용자는 Ant를 통해 실행해야 할 Task를 기술한 Build 파일을 작성해야 한다.
본 절에서는 각 기능들의 Build 파일에 기술되어야 할 내용들에 대해서 설명하고, 이를 통해 각 Ant Task를 실행하는 과정을 설명한다. Ant에 대한 설정법과 사용법은 http://ant.apache.org를 참조한다.
build.xml은 Ant Task를 기술한 XML 형식의 Ant Build 파일이다. Build 파일의 중요한 부분은 <project>에 포함되어 있으며, 일반적으로 1개의 프로젝트에 여러 개의 <target>이 존재한다. <target>은 실제 실행해야 하는 Ant Task작업을 정의한다.
JEUS에서 제공하는 Ant Task를 사용하기 위해서는 다음과 같이 Task definition을 build.xml에 추가해야 한다.
<taskdef resource="jeus/util/ant/jeusant.properties"> <classpath> <path refid="jeus.libraries"/> </classpath> </taskdef>
프로젝트의 속성들은 <project>의 하위에 정의하며, ${property-name}의 표현식을 통해 프로젝트 내에서 속성 값들을 사용할 수 있다.
JEUS에서 제공하는 Ant Task를 이용할 때, 주의할 점으로 가급적 Build 파일의 project에 "jeus.home"을 설정해주는 것이 안전하다. 이는 하나의 project에서 다수의 서로 다른 target을 수행할 때, 특정 target은 JEUS_HOME 정보를 필요로 하는 것이 존재할 수 있다.
JEUS_HOME은 static final 변수여서 하나의 JVM에서 처음 설정되는 값으로 고정되는 특징이 있다. 만약 JEUS_HOME 정보가 필요없는 target이 먼저 수행이되면, JEUS_HOME에 null 값이 설정되며, 다음 순서로 JEUS_HOME이 필요한 target이 수행될 때, 앞의 target이 설정한 JEUS_HOME의 값을 이용하게 되므로 원하는 동작과 다르게 동작할 수 있다.
본 절에서는 서버를 제어하는 Ant Task를 설명한다.
build.xml을 작성한 예제와 build.xml을 통해 JEUS boot/down을 실행하는 예제에 대해 설명한다.
다음은 johan이라는 노드 이름을 가진 JEUS 서버를 boot, down하는 작업에 대한 build.xml 예제이다.
[예 5.1] boot & down Ant Task build 파일 예제
<?xml version="1.0"?> <project name="example" default="boot" basedir="."> <property environment="env"/> <!-- jeus.home project property is required when you run the various tasks in an ant jvm and one of the various tasks requirs JEUS_HOME information --> <property name="jeus.home" value="${env.JEUS_HOME}"/> <!-- jeus.baseport is required to connect JEUS manager --> <property name="jeus.baseport" value="${env.JEUS_BASEPORT}"/> <!-- set properties to be needed for boot & down task --> <property name="node.name" value="nodename"/> <property name="username" value="username"/> <property name="password" value="password"/> <property name="jeusexit" value="false"/> <!-- set the library-classpath or to run the task class --> <path id="jeus.libraries"> <fileset dir="${jeus.home}/lib/system" includes="*.jar"/> </path> <!-- include the task definition resource file --> <taskdef resource="jeus/util/ant/jeusant.properties"> <classpath> <path refid="jeus.libraries"/> </classpath> </taskdef> <target name="init"> </target> <!-- boot task --> <target name="boot" depends="init"> <boot node="${node.name}" username="${username}" password="${password}"/> </target> <!-- down task --> <target name="down" depends="init"> <down node="${node.name}" jeusexit="${jeusexit}" username="${username}" password="${password}"/> </target> </project>
JEUS를 기동하기 위해서는 jeus 명령어를 통해 JEUS Manager가 Started(standby) 상태여야 한다. 이 상태에서 boot 명령을 실행하면 Booted(running) 상태가 되고, 여기서 down 명령을 실행하면 다시 Started(standby) 상태가 된다.
boot
c:\jeus>ant boot Buildfile: build.xml init: boot: [boot] johan boot done [boot] johan_container1 [boot] johan_container2 BUILD SUCCESSFUL Total time: 1 minute 12 seconds
down
c:\jeus>ant down Buildfile: build.xml init: down: [down] johan down successful BUILD SUCCESSFUL Total time: 9 seconds
JEUS를 기반으로 EJB 컴포넌트를 개발할 때 작업을 편리하게 수행할 수 있도록 몇 가지의 Ant Task를 제공한다. EJB 개발에 필요한 Ant Task 중에는 디플로이에 관련 Task가 있는데, 이에 대해서는 “5.4. Deployment Ant Task”를 참고한다.
appcompiler Ant Task는 pre-deployment 작업 후 EJB 모듈 혹은 개별적인 EJB Bean에 대해서 필요한 RMI Stub과 Skeleton 클래스를 임의로 생성하고 싶을 때 사용한다. 또한 이것은 클라이언트에서 원격지에 있는 디플로이된 Bean과 통신할 때 필요한 클래스 파일들 즉 EJB 클라이언트 JAR를 생성할 수 있다.
다음은 appcompiler Task 속성에 대한 설명이다.
[표 5.3] appcompiler Task 속성
다음은 build.xml을 작성한 예제와 build.xml을 통해 appcompiler를 실행시키는 예제이다.
build.xml 작성 예제
[예 5.2] appcompiler Ant Task build 파일 예제
<?xml version="1.0"?> <project name="example" default="appcompiler" basedir="."> <property environment="env"/> <!-- jeus.home project property is required when you run the various tasks in an ant jvm and one of the various tasks requirs JEUS_HOME information --> <property name="jeus.home" value="${env.JEUS_HOME}"/> <!-- set properties to be needed for appcompiler task --> <property name="client" value="client_view.jar"/> <property name="keep" value="false"/> <property name="jspmap" value="false"/> <property name="ejbjar" value="ejb-jar.xml"/> <property name="jeusejbdd" value="jeus-ejb-dd.xml"/> <property name="targetfile" value="ejb"/> <!-- set the library-classpath or to run the task class --> <path id="jeus.libraries"> <fileset dir="${jeus.home}/lib/system" includes="*.jar"/> </path> <!-- include the task definition resource file --> <taskdef resource="jeus/util/ant/jeusant.properties"> <classpath> <path refid="jeus.libraries"/> </classpath> </taskdef> <target name="init"> </target> <!-- appcompiler task --> <target name="appcompiler" depends="init"> <appcompiler jeusHome="${jeus.home}" client="${client}" keep="${keep}" jspmap="${jspmap}" ejbJar="${ejbjar}" jeusEjbDd="${jeusejbdd}" target="${targetfile}"/> </target> </project>
실행 예제
c:\jeus>ant appcompiler Buildfile: build.xml init: appcompiler: [appcompiler] ----------------------------------------------------------------- [appcompiler] try to compile ejb module ejb [appcompiler] ejb module ejb is compiled successfully [appcompiler] ----------------------------------------------------------------- BUILD SUCCESSFUL Total time: 3 minutes 7 seconds
ejbddinit Ant Task는 EJB 애플리케이션에 대해 JEUS EJB Deployment Descriptor(DD)를 생성할 때 이용한다. ejbddinit에 대한 설명은 “4.5. ejbddinit”를 참고한다.
다음은 ejbddinit Task 속성에 대한 설명이다.
[표 5.4] ejbddinit Task 속성
속성 | 설명 |
---|---|
propertyFile | ejbddinit을 실행할 때 참조할 프로퍼티 파일을 지정한다. 자세한 내용은 절 4.5. “프로퍼티”를 참고한다. |
logginginglevel | ejbddinit이 사용할 logging 레벨을 지정한다. 이 레벨은 J2SE logging API의 레벨을 따른다. (기본값: INFO) |
target | ejbddint을 실행하기 위한 jar archive 파일이다. 또는 이를 풀어둔 디렉터리의 경로이다. (필수 입력항목, 프로퍼티 파일이 target정보를 가졌을 경우에는 없어도 무방하다.) |
build.xml에 제한적으로 ejbddinit 프로퍼티를 설정할 수 있다. ejbddinit 프로퍼티에 대한 자세한 내용은 절 4.5. “프로퍼티”를 참고한다.
다음은 build.xml에서 ejbddinit 프로퍼티 파일의 프로퍼티 설정이 변경되어야 하는 방식에 대한 예이다. ejbddinit 프로퍼티 파일에서 설정할 수 있는 모든 프로퍼티가 동일한 변경 방식을 따른다.
[표 5.5] ejbddinit 프로퍼티 파일과 build.xml에서의 ejbddinit 프로퍼티 설정 예
ejbddinit 프로퍼티 파일 | build.xml |
---|---|
export-name=%{ejb-class} | <property name="export-name" value="%{ejb-class}"/> |
thread-max=10000 | <property name="thread-max" value="10000"/> |
HelloBean.export-port=55555 | build.xml에서는 특정 EJB 컴포넌트(HelloBean)에 대한 ejbddinit 프로퍼티 설정이 불가능 |
ejbddinit 프로퍼티 파일과 같이 build.xml에서도 export-name 설정에 '%{ejb-class}'와 같은 패턴을 사용할 수 있다. export-name 설정과 관련된 패턴 사용에 관한 내용은 절 4.5. “프로퍼티”를 참고한다.
build.xml에서는 특정 EJB 컴포넌트에 대한 ejbddinit 프로퍼티 설정은 지원하지 않으므로 특정 EJB 컴포넌트에 대한 ejbddinit 프로퍼티 설정이 필요한 경우에는 ejbddinit 프로퍼티 파일을 따로 작성해야 한다. 특정 EJB 컴포넌트에 대한 설정은 ejbddinit 프로퍼티 파일과 build.xml의 공통 설정보다 우선한다. ejbddinit 프로퍼티 파일과 build.xml에 동일한 설정이 존재할 경우에는 build.xml의 설정을 우선한다.
다음은 build.xml을 작성한 예제와 build.xml을 통해 ejbddinit을 실행하는 예제에 대한 설명이다.
build.xml 작성 예제
[예 5.3] ejbddinit Ant Task build 파일 예제
<?xml version="1.0"?> <project name="example" default="ejbddinit" basedir="."> <property environment="env"/> <!-- jeus.home project property is required when you run the various tasks in an ant jvm and one of the various tasks requirs JEUS_HOME information --> <property name="jeus.home" value="${env.JEUS_HOME}"/> <!-- set properties to be needed for ejbddinit task --> <property name="targetfile" value="ejb"/> <property name="logginglevel" value="FINE"/> <property name="propertyfile" value="ejbddinit.property"/> <!-- set properties to be needed for ejbddinit properties --> <property name="export-name" value="%{ejb-class}"/> <property name="thread-max" value="10000"/> <!-- set the library-classpath or to run the task class --> <path id="jeus.libraries"> <fileset dir="${jeus.home}/lib/system" includes="*.jar"/> </path> <!-- include the task definition resource file --> <taskdef resource="jeus/util/ant/jeusant.properties"> <classpath> <path refid="jeus.libraries"/> </classpath> </taskdef> <target name="init"> </target> <!-- ejbddinit task --> <target name="ejbddinit" depends="init"> <ejbddinit loggingLevel="${logginglevel}" property="${propertyfile}" target="${targetfile}" exportName="${export-name}" threadMax="${thread-max}"> </ejbddinit> </target> </project>
실행 예제
c:\jeus>ant ejbddinit Buildfile: build.xml init: ejbddinit: [ejbddinit] loadFile : c:\jeus\ejbddinit.property [ejbddinit] Source=c:\jeus\sample\ejbddinit\ejb.jar [ejbddinit] parameters setting successful.. [ejbddinit] DD Init Started.. [ejbddinit] Creating jeus descriptors [ejbddinit] DD Init finished.. BUILD SUCCESSFUL Total time: 6 seconds
본 절에서는디플로이와 관련한 Ant Task에 대해 설명한다.
deploy Task는 지정한 Java EE 애플리케이션을 JEUS 서버에 배치한다.
다음은 deploy Task 속성에 대한 설명이다.
[표 5.6] deploy Task 속성
deploy 외 다른 administrative operation을 실행하는 Task로 다음의 3가지 target을 가지고 있다.
다음은 modulecommand Task의 파라미터에 대한 설명이다.
[표 5.7] modulecommand Task 파라미터
build.xml을 작성한 예제와 build.xml을 통해 애플리케이션 디플로이를 실행하는 예제에 대한 설명이다.
[예 5.4] Deployment Ant Task build 파일 예제
<?xml version="1.0"?> <project name="example" default="deploy" basedir="."> <property environment="env"/> <!-- jeus.home project property is required when you run the various tasks in an ant jvm and one of the various tasks requirs JEUS_HOME information --> <property name="jeus.home" value="${env.JEUS_HOME}"/> <!-- jeus.baseport is required to connect JEUS manager --> <property name="jeus.baseport" value="${env.JEUS_BASEPORT}"/> <!-- set properties to be needed for deployment task --> <property name="node.name" value="nodename"/> <property name="target.name" value="${node.name}_container1,${node.name}_container2"/> <property name="source.path" value="${jeus.home}/webhome/app_home/myApp.ear"/> <property name="registered.app.name" value="myApp"/> <property name="plan.path" value="myApp_plan.jar"/> <property name="module.name" value="myApp"/> <property name="isOnlyDistribute" value="false"/> <property name="isPermanentDeploy" value="false"/> <property name="isPermanentUndeploy" value="false"/> <!-- module.type: J2EEApplication, EJBModule, WebModule, AppClientModule, ResourceAdapterModule --> <property name="module.type" value="J2EEApplication"/> <property name="uri" value="deployer:Jeus:${node.name}"/> <property name="user" value="username"/> <property name="password" value="password"/> <!-- set the library-classpath or to run the task class --> <path id="jeus.libraries"> <fileset dir="${jeus.home}/lib/system" includes="*.jar"/> </path> <!-- include the task definition resource file --> <taskdef resource="jeus/util/ant/jeusant.properties"> <classpath> <path refid="jeus.libraries"/> </classpath> </taskdef> <target name="init"> </target> <!-- deploy task --> <target name="deploy" depends="init"> <deploy targetNames="${target.name}" modulePath="${source.path}" planPath="${plan.path}" onlyDistribute="${isOnlyDistribute}" permanentDeploy="${isPermanentDeploy}" deployURI="${uri}" user="${user}" password="${password}"/> </target> <!-- deploy task for the application registered in JEUSMain.xml --> <target name="deploy_withRegisteredApp" depends="init"> <deploy registeredAppName="${registered.app.name}" deployURI="${uri}" user="${user}" password="${password}"/> </target> <!-- modulecommand task : start - set the command attribute 'start' --> <target name="start" depends="init"> <modulecommand command="start" moduleName="${module.name}" moduleType="${module.type}" targetNames="${target.name}" deployURI="${uri}" user="${user}" password="${password}"/> </target> <!-- modulecommand task : stop - set the command attribute 'stop' --> <target name="stop" depends="init"> <modulecommand command="stop" moduleName="${module.name}" moduleType="${module.type}" targetNames="${target.name}" deployURI="${uri}" user="${user}" password="${password}"/> </target> <!-- modulecommand task : undepoy - set the command attribute 'undepoy' --> <target name="undeploy" depends="init"> <modulecommand command="undeploy" moduleName="${module.name}" moduleType="${module.type}" targetNames="${target.name}" permanentUndeploy="${isPermanentUndeploy}" deployURI="${uri}" user="${user}" password="${password}"/> </target> </project>
Deployment Ant Task를 실행하기 전에는 반드시 ANT_OPTS(환경변수)에 다음을 추가한다.
-Djava.endorsed.dirs=JEUS_HOME\lib\endorsed
deploy
c:\jeus>ant deploy
Buildfile: build.xml
init:
deploy:
BUILD SUCCESSFUL
Total time: 2 minutes 26 seconds
stop
c:\jeus>ant stop
Buildfile: build.xml
init:
stop:
BUILD SUCCESSFUL
Total time: 11 seconds
start
c:\jeus>ant start
Buildfile: build.xml
init:
start:
BUILD SUCCESSFUL
Total time: 5 seconds
undeploy
c:\jeus>ant undeploy
Buildfile: build.xml
init:
undeploy:
BUILD SUCCESSFUL
Total time: 6 seconds
본 절에서는 JEUS에서 웹 서비스 생성과 웹 서비스 클라이언트를 위해 제공하는 Ant Task에 대해서 설명한다.
java2wsdl Task는 service endpoint interface 클래스(그리고 임의의 Java로 구현한 클래스)로부터 다음의 파일을 생성한다.
웹 서비스의 WSDL파일
JAX-RPC 매핑 파일
java2wsdl Ant Task를 정의하는 클래스는 'jeus.util.ant.webservices.Java2WsdlTask' 이다.
다음은 java2wsdl의 속성에 대한 설명이다.
<java2wsdl>은 Ant의 <classpath> element를 가지고 있다.
build.xml을 작성한 예제와 이 build.xml을 통해 java2wsdl을 실행시키는 예를 설명한다.
build.xml 작성 예제
[예 5.5] java2wsdl Ant Task build 파일 예제
<?xml version="1.0" encoding="UTF-8"?> <project name="java2wsdl" default="build" basedir="."> <property name="is.app-client.module" value="true" /> <import file="../../common/common-build.xml" /> <taskdef name="java2wsdl" classname="jeus.util.ant.webservices.Java2WsdlTask"> <classpath refid="jeus.libraries.classpath" /> </taskdef> <target name="-post-compile"> <java2wsdl destDir="${build.classes.dir}" verbose="true" configfilepath="${src.conf}/service-config.xml"> <classpath refid="classpath" /> </java2wsdl> </target> </project>
실행 예제
c:\jeus>jant ... [java2wsdl] Building Web Services : DocLitEchoService [java2wsdl] Generating WSDL File - c:\jeus\build\classes\DocLitEchoService.wsdl [java2wsdl] Generating JAX-RPC Mapping File - c:\jeus\build\classes\DocLitEcho Service-mapping.xml ... BUILD SUCCESSFUL Total time: 11 seconds
wsdl2java Task는 웹 서비스의 WSDL로부터 다음의 2개 중에 하나를 생성한다.
클라이언트 측 웹 서비스의 Stub Java 소스 코드들
서버 측 웹 서비스의 인터페이스 Java 소스 코드들
wsdl2java Ant Task를 정의하는 클래스는 'jeus.util.ant.webservices.Wsdl2JavaTask' 이다.
다음은 wsdl2java의 속성에 대한 설명이다.
[표 5.9] wsdl2java Task 속성
<wsdl2java>는 중첩된 ant의 <classpath>와 <mapping> element를 가지고 있다. <wsdl2java> Ant Task의 구조는 다음과 같다( +는 한 개 이상의 element를 가질 수 있음을 의미 한다).
Java 패키지와 WSDL Namespace 사이의 매핑이다. 사용자가 <mapping>을 생략하면, 모든 Namespace URI는 <wsdl2java> element인 package attribute에 기술된 패키지로 매핑된다.
다음은 <mapping>의 속성에 대한 설명이다.
만약 사용자가 <wsdl2java> element의 package attribute를 명시하면, 이 속성 값이 <mapping> element로 설정된 값에 우선한다. 즉, <mapping> element로 설정된 값은 무의미해진다.
build.xml을 작성한 예제와 이 build.xml을 통해 wsdl2java를 실행하는 예제를 설명한다.
build.xml 작성 예제
[예 5.6] wsdl2java Ant Task build 파일 예제
<?xml version="1.0" encoding="UTF-8"?> <project name="wsdl2java" default="build" basedir="."> <property name="is.app-client.module" value="true" /> <import file="../../../common/common-build.xml" /> <taskdef name="wsdl2java" classname="jeus.util.ant.webservices.Wsdl2JavaTask"> <classpath refid="jeus.libraries.classpath" /> </taskdef> <target name="-pre-compile"> <mkdir dir="${build.classes.dir}" /> <wsdl2java destDir="${build.classes.dir}" verbose="true" mode="import:server" doCompile="true" noDataBinding="true" package="sample.nodatabinding.service" outputmapping="${build.classes.dir}/BookQuoteService-mapping.xml" wsdl="${src.conf}/BookQuoteService.wsdl"> <classpath refid="classpath" /> </wsdl2java> </target> </project>
실행 예제
c:\jeus>jant Buildfile: build.xml ... [wsdl2java] [2007.05.26 21:44:07][2][b044] [client-10] [WSVC-5240] Analyzing WSDL : src\conf\BookQuoteService.wsdl [wsdl2java] [2007.05.26 21:44:10][2][] [client-10] [WSVC-0687] WSDL processing is done. ... BUILD SUCCESSFUL Total time: 6 seconds
wsgen Task는 service endpoint interface 클래스(그리고 임의의 Java로 구현한 클래스)로부터 다음을 생성한다.
Portable Artifacts
웹 서비스의 WSDL파일(옵션)
wsgen Ant Task를 정의하는 클래스는 'jeus.webservices.jaxws.tools.WsGen2' 이다.
다음은 wsgen 속성에 대한 설명이다.
[표 5.11] wsgen Task 속성
build.xml을 작성한 예제와 이 build.xml을 통해 wsgen을 실행한는 예제에 대한 설명이다.
build.xml 작성 예제
[예 5.7] wsgen Ant Task build 파일 예제
<?xml version="1.0" encoding="UTF-8"?> <project name="wsgen" default="build" basedir="."> <property name="is.app-client.module" value="true" /> <import file="../../common/common-build.xml" /> <taskdef name="wsgen" classname="com.sun.tools.ws.ant.WsGen"> <classpath refid="jeus.libraries.classpath" /> </taskdef> <target name="-post-compile"> <wsgen sei="fromjava.server.AddNumbersImpl" destdir="${build.classes.dir}" classpath="${build.classes.dir}" resourcedestdir="${build.classes.dir}" sourcedestdir="${build.classes.dir}" genwsdl="true" /> </target> </project>
실행 예제
c:\jeus>jant Buildfile: build.xml ... [echo] Compiling wsgen... ... BUILD SUCCESSFUL Total time: 6 seconds
wsimport Task는 웹 서비스의 WSDL로부터 다음의 2개 중에 하나를 생성한다
클라이언트 측 웹 서비스의 Stub Java 소스 코드들
서버 측 웹 서비스의 인터페이스 Java 소스 코드들
wsimport Ant Task를 정의하는 클래스는 'jeus.webservices.jaxws.tools.WsImport2' 이다.
다음은 wsimport 속성에 대한 설명이다.
[표 5.12] wsimport Task 속성
다음은 build.xml을 작성한 예제와 build.xml을 통해 wsimport을 실행하는 예제에 대한 설명이다.
build.xml 작성 예제
[예 5.8] wsimport Ant Task build 파일 예제
<?xml version="1.0" encoding="UTF-8"?> <project name="wsimport" default="build" basedir="."> <property name="is.app-client.module" value="true" /> <import file="../../common/common-build.xml" /> <taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport"> <classpath refid="jeus.libraries.classpath" /> </taskdef> <target name="-pre-compile"> <mkdir dir="${build.classes.dir}" /> <wsimport wsdl="${src.conf}/AddNumbers.wsdl" destDir="${build.classes.dir}" sourcedestdir="${build.classes.dir}" package="fromwsdl.server" /> </target> </project>
실행 예제
c:\jeus>jant Buildfile: build.xml ... [wsimport] Consider using <depends>/<produces> so that wsimport won't do unnecessary compilation [wsimport] parsing WSDL... [wsimport] [wsimport] [wsimport] generating code... ... BUILD SUCCESSFUL Total time: 6 seconds
xjc Task는 XML 스키마 파일을 Java 프로그래밍 언어로 된 JAXB Content 클래스들로 변환한다.
다음은 xjc 속성에 대한 설명이다.
[표 5.13] xjc Task 속성
다음은 build.xml을 작성한 예제와 build.xml을 통해 xjc를 실행하는 예제에 대한 설명이다.
build.xml 작성 예제
[예 5.9] xjc Ant Task build 파일 예제
<?xml version="1.0" encoding="UTF-8"?> <project name="xjc" default="build" basedir="."> <property name="is.app-client.module" value="true" /> <import file="../../common/common-build.xml" /> <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask"> <classpath refid="jeus.libraries.classpath" /> </taskdef> <target name="-pre-compile"> <mkdir dir="${build.classes.dir}" /> <xjc schema="${src.conf}/ts.xsd" package="com.tmaxsoft" destdir="${build.classes.dir}"> <produces dir="${build.classes.dir}/com/tmaxsoft" includes="**/*.java" /> <classpath refid="jeus.libraries.classpath" /> <classpath refid="classpath" /> </xjc> </target> </project>
실행 예제
c:\jeus>jant Buildfile: build.xml ... [xjc] c:\jeus\build\classes\com\tmaxsoft is not found and thus excluded from the dependency check [xjc] Compiling file:/c:/jeus/src/conf/ts.xsd [xjc] Writing output to c:\jeus\build\classes ... BUILD SUCCESSFUL Total time: 4 seconds
schemagen Task는 Java 클래스들에 나타나는 각각의 Namespace에 대해 하나의 스키마 파일을 생성한다.
다음은 schemagen의 속성에 대한 설명이다.
build.xml을 작성한 예제와 build.xml을 통해 schemagen을 실행하는 예제에 대한 설명이다.
build.xml 작성 예제
[예 5.10] schemagen Ant Task build 파일 예제
<?xml version="1.0" encoding="UTF-8"?> <project name="schemagen" default="build" basedir="."> <property name="is.app-client.module" value="true" /> <import file="../../common/common-build.xml" /> <taskdef name="schemagen" classname="com.sun.tools.jxc.SchemaGenTask"> <classpath refid="jeus.libraries.classpath" /> </taskdef> <target name="-pre-compile"> <mkdir dir="${build.classes.dir}" /> <schemagen destdir="${build.classes.dir}"> <src path="${src.dir}" /> <classpath refid="jeus.libraries.classpath" /> <classpath refid="classpath" /> </schemagen> </target> </project>
실행 예제
c:\jeus>jant Buildfile: build.xml ... [schemagen] Generating schema from 2 source files [schemagen] Note: Writing c:\jeus\schema1.xsd ... BUILD SUCCESSFUL Total time: 5 seconds