我们在 Eclipse 中获得了一个 GWT 项目,否则它可以工作。现在我想要一个在服务器上运行的脚本,它从源代码管理中提取最新版本并在服务器上编译并部署它。这将为我们节省大量手动工作,并允许我们在带宽有限的连接上部署新版本(因为我们不必将应用程序上传到服务器)。
拉取最新版本的源代码后,脚本尝试使用以下命令编译代码:
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
,所有使用的 .jars(除了 GWT 的东西)都在 .jar 中/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
确实存在并且imho应该在类路径中?!任何人知道这里可能出了什么问题吗?是否有可能在某些日志中准确地看到 eclipse 为编译而执行的命令?我查看了 eclipse 可以导出的 build.xml,但似乎不包含要为生产编译的目标。
别的东西:显然 GWT 期望X.gwt.xml
是 at /path/company/projects/pull-compile-deploy/X/X/src/nl/company/project/X.gwt.xml
,而 eclipse 把它放进去/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.X
并且路径refid="project.classpath"
包含所有使用的库以及 GWT 库(gwt-user.jar、gwt-dev.jar 和 validation-api-1.0.0.GA(-source).jar)。
XMain 类不继承任何东西(除了从 Object 继承)并且只实现 EntryPoint(包含在 gwt-user.jar 中)。所以我不认为这个问题与编译器给出的第二个提示有关。
有任何想法吗?