【发布时间】:2013-01-22 14:40:32
【问题描述】:
我们在 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 除外)都在/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,但似乎不包含编译用于生产的目标。
其他:显然 GWT 期望 X.gwt.xml 位于 /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 中)。所以我认为这个问题与编译器给出的第二个提示无关。
有什么想法吗?
【问题讨论】:
标签: java eclipse gwt command-line compilation