webAppCreator 를 이용해서 project 를 만들자. 그러면 build.xml 이 같이 생성된다. 이 build.xml 을 이용해서 기존의 Spring project 에서 사용하는 build.xml 안에 merge 를 한 번 해보자.
webAppCreator 사용법
webAppCreator 로 project 생성
c:\Program Files\gwt\gwt-2.6.0>webAppCreator -out c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2 com.namh.gwtstats.GwtStats Generating from templates: [sample, eclipse, readme, ant] Not creating tests because -junit argument was not specified. Created directory c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\src Created directory c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\src\com\namh\gwtstats Created directory c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\src\com\namh\gwtstats\client Created directory c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\src\com\namh\gwtstats\server Created directory c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\src\com\namh\gwtstats\shared Created directory c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\test Created directory c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\test\com\namh\gwtstats Created directory c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\war Created directory c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\war\WEB-INF Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\src\com\namh\gwtstats\GwtStats.gwt.xml Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\src\com\namh\gwtstats\client\GreetingService.java Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\src\com\namh\gwtstats\client\GreetingServiceAsync.java Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\src\com\namh\gwtstats\client\GwtStats.java Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\src\com\namh\gwtstats\server\GreetingServiceImpl.java Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\src\com\namh\gwtstats\shared\FieldVerifier.java Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\war\WEB-INF\web.xml Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\war\GwtStats.css Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\war\GwtStats.html Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\war\favicon.ico Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\.classpath Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\.project Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\GwtStats.launch Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\README.txt Created file c:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats2\build.xml
GWT compile
ant 를 실행하면 아래 처럼 compile 이 실행이 된다.Compiling module com.namh.gwtstats.GwtStats Compiling 5 permutations Compiling permutation 0... Compiling permutation 1... Compiling permutation 2... Compiling permutation 3... Compiling permutation 4... Compile of permutations succeeded Linking into C:\Users\namhadmin\Documents\workspace\WebPortal\GwtStats\war\gwtstats Link succeeded Compilation succeeded -- 18.425s
Client files in WEB-INF/classes
기본적으로 GWT 관련 client code 도 WEB-INF/classes 에 .class 파일이 copy 된다. 이 녀석은 실제 실행환경에서 쓰이지 않는다. 그래서 이 부분은 ant 의 build.xml 을 수정해서 적용해야 한다. 자세한 내용은 아래를 참고하자.
gwt-unitCache
이 file 은 gwt 를 compile 할 때 속도 향상을 위한 cache 라고 한다. (Release Note for 2.4.0)그래서 실제 실행할 때는 필요없으니, compile 후에 지우면 된다고 한다. 이 녀석을 생성하지 않고 compile 을 하게 option 을 줄 수도 있다고 한다.이 값을 변경하기 위해서는 build.xml 에 값을 넣어줘야 한다.
아래처럼 넣어주면 된다고 한다. 자세한 내용은 위의 링크를 참고하자.
- <sysproperty key="gwt.persistentunitcachedir" value="cache_dir"/>
<target name="..." > ... <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler"> <sysproperty key="gwt.persistentunitcachedir" value="./"/> <classpath> ...
WEB-INF/deploy
이 파일은 GWT 2.2 부터 생겨난듯 하다. 이 녀석을 GWT compiler option "-deploy" 를 이용해서 다른 경로에 만들수도 있다고 한다. 참고로 symbolMaps 등은 obfuscated javascript 를 debugging 을 할 때 사용된다.(GWT 는 superdevmode 를 지원한다.) 근데 생각보다 용량이 많은 듯 하다.아래처럼 option 을 주면 된다.
-deploy ./gwt-deploy
분리된 build.xml 을 사용하기
build.xml / target name="javac"
javac 부분을 수정하자. 여기서 정해진 folder 이름의 하위에 있는 모든 .java 파일을 compile 하도록 되어 있기 때문에, 자신의 directory 에 맞춰서 경로를 수정하자.<target name="javac" depends="libs" description="Compile java source to bytecode"> <mkdir dir="war/WEB-INF/classes"/> <javac srcdir="src/com/namh" includes="**" encoding="utf-8" destdir="war/WEB-INF/classes" source="1.5" target="1.5" nowarn="true" debug="true" debuglevel="lines,vars,source"> <classpath refid="project.class.path"/> </javac> <copy todir="war/WEB-INF/classes"> <fileset dir="src/com/namh" excludes="**/*.java"/> </copy> </target>
현재있는 ant 와 합치기
.html / .css
처음 project 를 만들면 생기는 .html/.css 는 war 에 해당하는 path 안으로 복사 해 놓자. 여기서는 war/ 에 넣는다고 가정하겠다.- <project_path>\war\*.html
- <project_path>\war\*.css
참로고, 기본적으로 war 에 있다는 가정하에 만들어 내는 듯 하다. 그래서 gwt compile 을 하면 compile option "-war" 에 정의한 folder 를 기점으로 gwt-unitCache 나 WEB-INF/deploy 등을 만들어 낸다.
deploy 는 option 으로 바꿀 수 있으나, cache 도 설정을 변경할 수 있다.(참고)
Compile .java
기존의 code 가 ant 를 사용해서 java 를 compile 하는 경우인데,기존의 java src path 안에 gwt src 를 안에 넣었다면,
ant 를 실행하면 java file 이 compile 될 때 gwt 도 같이 compile 될 것이다.
아래 부분을 javac 에 추가하면 된다.
<!-- Configure path to GWT SDK --> <property name="gwt.sdk" location="C:/Program Files/gwt/gwt-2.6.0" /> <path id="gwt.class.path"> <pathelement location="war/WEB-INF/classes"/> <pathelement location="${gwt.sdk}/gwt-user.jar"/> <fileset dir="${gwt.sdk}" includes="gwt-dev*.jar"/> <!-- Add any additional non-server libs (such as JUnit) --> <fileset dir="war/WEB-INF/lib" includes="**/*.jar"/> </path>
그리고 compile 부분에 아래 부분도 넣어주자.
<target name="compile">
...
<javac srcdir="${source.home}" destdir="${web.info}/classes"
...
<classpath>
...
<path refid="compile.classpath"/>
<path refid="gwt.class.path"/>
</classpath>
</javac>
Copy libraries
libs 를 copy 해주는 부분도 추가하자.<target name="libs" description="Copy libs to WEB-INF/lib"> <mkdir dir="war/WEB-INF/lib" /> <copy todir="war/WEB-INF/lib" file="${gwt.sdk}/gwt-servlet.jar" /> <copy todir="war/WEB-INF/lib" file="${gwt.sdk}/gwt-servlet-deps.jar" /> <!-- Add any additional server libs that need to be copied --> </target> <target name="compile" depends="libs"> ...
compile GWT
여기서 주의할 점은 gwt.src.client 부분의 path 이다.
아래 com.namh.gwtstats.GwtStats 보다 상위 directory 를 해줘야 한다. 참고로,
<property name="gwt.src.client" location="src/com/namh" />
로 build 를 했더니 com.namh.gwtstats.GwtStats 를 찾을 수 없다고 error 가 떴다.그리고 아래 target 의 경우 compile 의 depends 가 잘 실행되지 않는다면, compile target 내부로 넣어도 잘 동작한다.
<property name="gwt.args" value="" /> <property name="gwt.src.client" location="src" /> ... <target name="gwtc" depends="compile" description="GWT compile to JavaScript (production mode)"> <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler"> <classpath> <pathelement location="${gwt.src.client}"/> <path refid="gwt.class.path"/> <pathelement location="${gwt.sdk}/validation-api-1.0.0.GA.jar" /> <pathelement location="${gwt.sdk}/validation-api-1.0.0.GA-sources.jar" /> </classpath> <!-- add jvmarg -Xss16M or similar if you see a StackOverflowError --> <jvmarg value="-Xmx256M"/> <arg line="-war"/> <arg value="war/gwt"/> <!-- Additional arguments like -style PRETTY or -logLevel DEBUG --> <arg line="${gwt.args}"/> <arg value="com.namh.gwtstats.GwtStats"/> </java> </target>
superdevmode
superdevmode 는 원래 dependency 로 compile 하는 부분을 가지고 있지만, 굳이 없어도 괜찮다. 그래서 빼고 아래처럼 편집했다.superdevmode 사용법은 여기를 참고하자.
<!-- GWT : super dev mode -->
<target name="superdevmode" description="Run Super Dev Mode">
<java failonerror="true" fork="true" classname="com.google.gwt.dev.codeserver.CodeServer">
<classpath>
<pathelement location="src"/>
<pathelement location="${gwt.sdk}/gwt-codeserver.jar" />
<path refid="gwt.class.path"/>
<pathelement location="${gwt.sdk}/validation-api-1.0.0.GA.jar" />
<pathelement location="${gwt.sdk}/validation-api-1.0.0.GA-sources.jar" />
</classpath>
<jvmarg value="-Xmx256M"/>
<arg value="com.namh.gwtstats.GwtStats"/>
</java>
</target>
댓글 없음:
댓글 쓰기