我可以用什么方法为.war文件构建GWT应用程序?
我已经有一个ant文件来构建我的项目,但是,它非常难看和缓慢。我想你们其中一个人有更好的选择......
感谢
答案 0 :(得分:0)
使用maven。它已经过验证,常用于构建java和GWT项目。
您应该使用GWT maven插件:http://mojo.codehaus.org/gwt-maven-plugin/
但是你应该知道:GWT构建总是很慢(取决于代码量)。因此,您必须仅将完整版本用于生产目的。在maven中,您只能运行特定的子任务并可以添加配置文件。有关详细信息,请参阅插件documentation。
<强> UPD:强>
因此,您必须仅将完整版本用于生产目的。
事实并非如此。但是对于通用开发过程,您不需要每次都运行GWT编译。在调试模式下运行GWT时 - 它以托管模式运行。所以你不要在经常重建上浪费你的时间。
答案 1 :(得分:0)
我个人使用maven,但是,嘿,他们自己。 (至少你没有使用Makefile)。
但是,编译GWT应用程序会很慢。 GWT编译器需要为常见的浏览器类型编译多种口味的javascript,甚至谷歌工程师也不能影响物理定律(可能在下一版番石榴中)。
我的项目编译了6次单独的迭代,并产生了40MB的战争。优点是,一旦我陷入战争,Tomcat的性能就会破坏托管模式的性能。
答案 2 :(得分:0)
我创建了比以前更好的ant构建,完整的代码是:
<?xml version="1.0" encoding="UTF-8"?>
<project name="Build GPA" basedir="." default="war">
<property name="gwt.module.name" value="com.geekvigarista.scrummanager.GWT_ScrumManager"/>
<property name="server.resources.name" value="server_resources"/>
<property name="jar.name" value="gpa.jar"/>
<property name="war.name" value="gpa.war"/>
<property name="src.dir" location="src"/>
<property name="server.resources.dir" location="war/${server.resources.name}"/>
<property name="build.dir" location="build"/>
<property name="build.server.resources.dir" location="war/WEB-INF/classes/server_resources"/>
<property name="lib.dir" location="war/WEB-INF/lib"/>
<property name="gwt.client.dir" location="com/geekvigarista/scrummanager/client"/>
<path id="project.classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="prepare">
<mkdir dir="${build.dir}"/>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<!-- Compile the java source code using javac -->
<target name="compile" depends="prepare">
<javac srcdir="${src.dir}" destdir="${build.dir}">
<classpath refid="project.classpath"/>
</javac>
</target>
<!-- Invoke the GWT compiler to create the Javascript for us -->
<target name="gwt-compile" depends="compile">
<java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
<classpath>
<!-- src dir is added to ensure the module.xml file(s) are on the classpath -->
<pathelement location="${src.dir}"/>
<pathelement location="${build.dir}"/>
<path refid="project.classpath"/>
</classpath>
<jvmarg value="-Xmx512M"/>
<arg value="${gwt.module.name}"/>
</java>
</target>
<!-- Package the compiled Java source into a JAR file -->
<target name="jar" depends="compile">
<jar jarfile="${lib.dir}/${jar.name}" basedir="${build.dir}/">
<!-- Don't wrap any of the client only code into the JAR -->
<exclude name="${gwt.client.dir}/**/*.class"/>
</jar>
</target>
<!-- Copy the static server resources into the required
directory ready for packaging -->
<target name="copy-resources">
<copy todir="${build.server.resources.dir}" preservelastmodified="true">
<fileset dir="${server.resources.dir}"/>
</copy>
</target>
<!-- Package the JAR file, Javascript, static resources
and external libraries into a WAR file -->
<target name="war" depends="gwt-compile, jar, copy-resources">
<war basedir="war" destfile="${war.name}" webxml="war/WEB-INF/web.xml">
<exclude name="WEB-INF/**" />
<exclude name="${server.resources.name}/**"/>
<webinf dir="war/WEB-INF/">
<include name="classes/${server.resources.name}/**" />
<include name="**/*.jar" />
<exclude name="**/gwt-dev.jar" />
<exclude name="**/gwt-user.jar" />
</webinf>
</war>
</target>
</project>
在war文件夹中需要一个名为“server_resources”的文件夹。 这个解决方案对我很有用。