[컴][웹] GWT 를 ant 로 build 하기


gwt 를 직접 컴파일 하기 / compile gwt / gwtc





ant 를 이용해서 GWT compiler 를 실행시켜 보자.

GWT compile


framework 의 sample 에 보면 build.xml 이 있다. 이녀석은 make 의 Makefile 같은 녀석이다. 이 녀석을 드려다 보면 compile 하는 법을 쉽게 알 수 있다.

test 를 위해서 ant 를 설치해야 한다. 만약 eclipse 가 설치되어 있다면 깔려있을 수도 있다. plugin 을 뒤져보자. javaEE version 을 설치한 경우에는 아래와 같이 찾을 수 있다.
<eclipse_path>\plugins\org.apache.ant_1.8.4.v201303080030\bin\ant.bat

그럼 이제부터 sample 에 있는 build.xml 을 살펴보자. 아래 경로에 있는 녀석을 살펴보자.
<gwt-2.6.0_path>\samples\Hello\build.xml


target gwtc

안을 보면 아래와 같이 gwtc 라는 부분을 찾을 수 있다. 이 녀석을 실행하면 java 를 변환해서 javascript 로 만들 수 있다.

  <target name="gwtc" depends="javac" description="GWT compile to JavaScript (production mode)">
    <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
      <classpath>
        <pathelement location="src"/>
        <path refid="project.class.path"/>
        <pathelement location="../../validation-api-1.0.0.GA.jar" />
        <pathelement location="../../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"/>
      <!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
      <arg line="${gwt.args}"/>
      <arg value="com.google.gwt.sample.hello.Hello"/>
    </java>
  </target>



  <target name="javac" depends="libs" description="Compile java source to bytecode">
    <mkdir dir="war/WEB-INF/classes"/>
    <javac srcdir="src" 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" excludes="**/*.java"/>
    </copy>

  </target>

...

  <path id="project.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

gwtc 를 실행하면 아래와 같이 compile 이 된다.
c:\Program Files\gwt\gwt-2.6.0\samples\Hello>"c:\Program Files\gwt\eclipse\plugins\org.apache.ant_1.8.4.v201303080030\bin\ant.bat" gwtc

Buildfile: c:\Program Files\gwt\gwt-2.6.0\samples\Hello\build.xml

libs:

javac:
    [javac] c:\Program Files\gwt\gwt-2.6.0\samples\Hello\build.xml:29: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

gwtc:
     [java] Compiling module com.google.gwt.sample.hello.Hello
     [java]    Compiling 5 permutations
     [java]       Compiling permutation 0...
     [java]       Compiling permutation 1...
     [java]       Compiling permutation 2...
     [java]       Compiling permutation 3...
     [java]       Compiling permutation 4...
     [java]    Compile of permutations succeeded
     [java] Linking into c:\Program Files\gwt\gwt-2.6.0\samples\Hello\war\hello
     [java]    Link succeeded
     [java]    Compilation succeeded -- 14.941s

BUILD SUCCESSFUL
Total time: 17 seconds



Default target

기본적으로 ant 를 실행하면 build.xml 을 바라보게 되는데, 이때 build.xml 에 아래처럼 default target 을 지정해 놓았기 때문에 gwtc 가 실행될 것이다. 굳이 gwtc 를 입력하지 않아도 된다는 이야기이다.

<project name="Hello" default="build" basedir=".">
...
<target name="build" depends="gwtc" description="Build this project" />



결과

그러면 아래와 같이 결과를 확인할 수 있다.






Others

직접 command 창에서 compile 을 시도해 보다가 관뒀다. 아래는 그 내용이다. 참고로 여기서 compile 을 java code 를 .js 로 만들어 주는 compile 을 이야기 한다.
.java -> .js


Compiler.java

아래 경로에 있는 Compiler.java 를 실행시키면 된다.
<gwt-2.6.0_path>\gwt-dev.jar\com\google\gwt\dev\Compiler.java



일단 실행시키면, 아래와 같은 결과가 나온다.

c:\Program Files\gwt\gwt-2.6.0>java -cp ./gwt-dev.jar com.google.gwt.dev.Compiler

Missing required argument 'module[s]'
Google Web Toolkit 2.6.0
Compiler [-logLevel level] [-workDir dir] [-[no]compileReport] [-X[no]checkCasts] [-X[no]classMetadata] [-[no]draftCompile] [-[no]checkAssertions] [-X[no]closureCompiler] [-XfragmentCount numFragments] [-XfragmentMerge numFragments] [-gen dir] [-optimize level] [-[no]saveSource] [-style style] [-[no]failOnError] [-X[no]enforceStrictResources] [-[no]validateOnly] [-sourceLevel [auto, 1.6, 1.7]] [-localWorkers count] [-war dir] [-deploy dir] [-extra dir] [-saveSourceOutput dir] module[s]
...
...


src

module 인자(argument)가 필요하다. module 인자를 src 를 넣고 다시 실행했다.


c:\Program Files\gwt\gwt-2.6.0>java -cp ./gwt-dev.jar com.google.gwt.dev.Compiler d:\mine\programming\gwt\gwtia-ch03-basicproject\src\

Loading inherited module 'd:\mine\programming\gwt\gwtia-ch03-basicproject\src\'   [ERROR] Unable to find 'd:\mine\programming\gwt\gwtia-ch03-basicproject\src\.gwt.xml' on your classpath; could be a typo, or maybe you forgot to include a classpath entry for source?



이부분은 시도하다가 그만뒀지만, 아래 부분을 참조하면 된다.

<target name="gwtc" depends="javac" description="GWT compile to JavaScript (production mode)">

    <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
      <classpath>
        <pathelement location="src"/>
        <path refid="project.class.path"/>
        <pathelement location="C:/Program Files/gwt/gwt-2.6.0/validation-api-1.0.0.GA.jar" />
        <pathelement location="C:/Program Files/gwt/gwt-2.6.0/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"/>

      <!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
      <arg line="${gwt.args}"/>
      <arg value="com.namh.gwtstats.GwtStats"/>
    </java>
</target>



See Also


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




Reference

  1. Understanding the GWT Compiler, GWT project homepage


댓글 없음:

댓글 쓰기