2013-01-22 104 views
1

我们在Eclipse中得到了一个GWT项目,否则它就会工作。 现在我想要一个在服务器上运行的脚本,它从源代码管理中获取最新版本,并将其编译到服务器上并进行部署。 这将为我们节省大量的人工工作,并允许我们在有限带宽的连接上部署新版本(因为我们不必将应用程序上传到服务器)。从命令行编译一个Eclipse eclipse GWT项目,没有eclipse:编译错误

拉动了最新版本的源代码后,该脚本尝试使用下面的命令来编译代码:

java -cp "/path/eclipse/plugins/com.google.gwt.eclipse.sdkbundle_2.5.0.v201211121240-rel-r42/gwt-2.5.0/*:/path/company/projects/pull-compile-deploy/X/X/src:/path/company/projects/pull-compile-deploy/X/X/war/WEB-INF/lib/*" com.google.gwt.dev.Compiler nl.company.projects.X 

Compiling module nl.company.projects.X 
    Finding entry point classes 
     [ERROR] Unable to find type 'nl.company.projects.X.client.XMain' 
     [ERROR] Hint: Previous compiler errors may have made this type unavailable 
     [ERROR] Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly 

所有的源代码是/path/company/projects/pull-compile-deploy/X/X/src,所有使用.jar文件(除了GWT的东西)在/path/company/projects/pull-compile-deploy/X/X/war/WEB-INF/lib/。显然有些问题。

问题:文件/path/company/projects/pull-compile-deploy/X/X/src/nl/company/projects/X/client/XMain.java确实存在,应该在类路径?! 任何人任何想法在这里可能会出现什么问题? 是否有可能在某些日志中看到eclipse执行编译的命令?我查看了eclipse可以导出的build.xml,但似乎没有包含编译生产的目标。

别的东西:apperantly GWT预计X.gwt.xml是在/path/company/projects/pull-compile-deploy/X/X/src/nl/company/project/X.gwt.xml,而蚀把它放在/path/company/projects/pull-compile-deploy/X/X/src/nl/company/project/X/X.gwt.xml(即嵌套一个目录深),我解决了这个问题通过创建符号链接。

进一步编辑: 由于一个答案集中在我如何调用编译工具,我已经重写了在Ant中,见下文。 问题依然存在。

<!-- Compile the source using javac. --> 
<target name="compile" depends="init"> 
    <javac srcdir="src/" destdir="bin/"> 
     <classpath refid="project.classpath"/> 
    </javac> 
</target> 


<!-- Use the GWT-compiler. --> 
<target name="gwt-compile" depends="compile"> 
    <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler"> 
     <classpath> 
      <path refid="project.classpath"/> 
      <pathelement location="src/"/> 
      <pathelement location="bin/"/> 
     </classpath> 
     <jvmarg value="-Xmx512M"/> 
     <arg value="${module.name}"/> 
    </java> 
</target> 

上面的Ant脚本有什么问题吗? module.name = nl.company.projects.Xrefid="project.classpath"的路径包含所有使用的库以及GWT库(gwt-user.jar,gwt-dev.jar和validation-api-1.0.0.GA(-source).jar)。

XMain类不会继承任何东西(除了Object),并且只实现EntryPoint(它包含在gwt-user.jar中)。所以我不认为这个问题与编译器给出的第二个提示有关。

任何想法?

回答

1

GWT需要您的javac您的课程,它需要*.java*.class文件。

这并非总是如此,并且应该在未来发生变化(例如参见https://code.google.com/p/google-web-toolkit/issues/detail?id=7602),但现在情况如此:您需要登录javac,然后才能登录com.google.gwt.dev.Compiler

javac -cp "/path/eclipse/plugins/com.google.gwt.eclipse.sdkbundle_2.5.0.v201211121240-rel-r42/gwt-2.5.0/*:/path/company/projects/pull-compile-deploy/X/X/war/WEB-INF/lib/*" -sourcepath /path/company/projects/pull-compile-deploy/X/X/src /path/company/projects/pull-compile-deploy/X/X/src/nl/company/projects/X.java -d /path/company/projects/pull-compile-deploy/X/X/bin 

java -cp "/path/eclipse/plugins/com.google.gwt.eclipse.sdkbundle_2.5.0.v201211121240-rel-r42/gwt-2.5.0/*:/path/company/projects/pull-compile-deploy/X/X/src:/path/company/projects/pull-compile-deploy/X/X/bin:/path/company/projects/pull-compile-deploy/X/X/war/WEB-INF/lib/*" com.google.gwt.dev.Compiler nl.company.projects.X 

(请仔细检查后再使用上面的命令)

编辑:(响应你的 “问题” 重新的X.gwt.xml):GWT 预计的X.gwt.xml在nl/company/projects/X.gwt.xml因为这就是你告诉它使用:module.name = nl.company.projects.x。如果文件位于nl/company/projects/X/X.gt.xml,则使用nl.company.projects.X.X作为模块名称。这里使用符号链接很可能是问题:模块的源路径(搜索<sourcehttps://developers.google.com/web-toolkit/doc/latest/DevGuideOrganizingProjects#DevGuideModuleXml)将为nl/company/projects/client,因此将不包括nl/company/projects/X/client您的XMain类所在的位置;这是不可用 GWT编译器。


这就是说,我完全同意SSR:使用一个体面的构建工具:蚂蚁,Maven的,摇篮,制作,不管,它会让你的生活变得更轻松。管理依赖关系的构建工具(Ant + Ivy,Maven,Gradle)甚至更好。

+1

谢谢,我不知道我必须先使用常规编译器进行编译。但是,这似乎并没有解决我的问题。 – user1302914

+0

查看编辑的回复。 –

+0

符号链接是问题。真的想要对我的大脑进行一些版本控制,因为我不知道为什么我认为这是必需的/一个好主意。谢谢! – user1302914

0

为什么在HELL你会把自己通过这样的非标准建立这样的练习。

如果是非学术项目,则使用maven。如果你觉得maven很难使用ant。

两种类型的示例均由GWT团队提供 - http://code.google.com/p/google-web-toolkit/source/browse/#svn%2Ftrunk%2Fsamples

注意 - maven有插件可以做标准化的方式的大部分东西。

+3

这是有点侮辱,并不反应OP的原始问题。建议maven可能会让这更简单就好,只要它与该问题的实际答案配对即可。 – Myles

+0

我已经分享了来自GWT示例的​​基于ant和maven项目的示例链接! T.Broyer在GWT团队工作,并在所选答案的末尾提到ant/maven/gradle是选择! – SSR

+0

我发现精彩的命令行选项。我需要触发构建/编译以及易于管理的其他需求。为了获得定制的构建过程,我不会陷入maven地狱。所以我觉得这个选项很容易就可以使用。 –