[컴][웹] GWT 를 spring 과 함께 연동하기 - build.xml

gwt build 하기 / gwt build.xml 로 build 하기  / gwt build.xml 편집하기




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>


clean

clean 부분은 알아서 넣도록 하자.^^;;



댓글 없음:

댓글 쓰기