2011-12-24 44 views
4

我想将GWT库模块打包到JAR文件中,并通过将JAR文件添加到其类路径中来在单独的GWT Web应用程序中使用该库。需要帮助将GWT库模块封装到JAR中

的JAR包含:

  • Java源代码
  • RequestFactory产生源
  • UiBinder的产生源
  • 类文件
  • 库模块描述
  • UiBinder的XML文件

库模块从Web应用程序继承:

<module> <!-- my web app's module descriptor --> 
    ... 
    <inherits name="[path to my library module].Library"/> 
    ... 
</module> 

不过,我遇到了

Deferred binding failed for '[path to mylibrary].client.ClientFactory'... 

错误,当我尝试启动Web应用程序,它初始化库在其onModuleLoad( ) 方法。失败是由库模块使用的UiBinder视图和RequestFactory引起的。以开发模式启动或编译Web应用程序会导致错误,并显示错误消息,指出丢失的CSS文件和非法引用emul.java.util包下生成的源代码(我试图在JAR中包括此包和所有其他生成的源代码, t帮助。)

有人能告诉我需要包含在JAR中吗?使用UiBinder和RequestFactory的库模块是否需要额外的资源?

是否有人成功地将使用RequestFactory和UiBinder的GWT库模块打包到JAR中?

进一步说明:问题是关于创建一个GWT库模块;一个包含客户端和服务器组件的模块,RequestFactory和UiBinder。请注意,将GWT库模块打包到JAR中,而将具有入口点的常规GWT模块打包到WAR中。我试图从另一个GWT项目打包这样的库模块和GWT <inherit>失败。

回答

1

要么我误解了你的问题,要么你错误地关联了GWT编译和Java字节码编译。

传统的Java开发

  1. Java源代码编译成Java字节码的.class文件。
  2. 在开发期间以及在 部署期间编译.class文件。
  3. 编译的.class文件可以在两个 开发和部署的类路径中使用
  4. 其位置符合各自 包不要紧,如果.class文件的jar文件或者文件夹 层次,只要命名空间。
  5. Java源文件不能部署到部署类路径 中,但可以将JSP源文件作为JSP部署到战争中。

GWT并非如此。

  1. GWT是客户端开发。
  2. GWT被编译成Javascript。
  3. 生成的JavaScript打包到一个war文件夹中。
  4. 即,编译成可执行文件的GWT是JavaScript文件。
  5. GWT编译要求所有的Java类都是源文件。
  6. 您的Java类引用的任何Java库也必须是Java源文件。

GWT战争

  1. GWT还便于客户端的对准和连通服务器端。
  2. 服务器端通常是部署到JEE战争结构中的传统Java。
  3. 因此,部署之战将GWT客户端编译为javascript以及JEE .class字节码文件。
  4. 但是,GWT JavaScript文件与HTML,CSS和其他URL可寻址资源一起放置在战争的URL可见部分。
  5. 服务器端编译的java字节码文件或jar被放入非URL寻址的类和lib目录中。

因此

  1. GWT编译部署结构不能用于开发。
  2. GWT被编译成javascript部署战争结构。
  3. 将GWT编译资源封装到 的jar包中进行部署是没有“这样的事情”。
  4. 编译后的GWT资源必须打包到战争的URL地址 一侧。
  5. 在编译后的JavaScript文件中,类路径没有“这样的东西”。 JSNI中的任何类路径概念都是模拟JSNI的便利。

在结论

编译GWT资源是不可用的,也不它们将是GWT开发可见的,因为...... GWT开发需要Java源代码,并且GWT客户端部署是JavaScript的战争,而且JavaScript是不像字节码罐/文件。

因此,在GWT中,没有像打包可用于开发和部署的jar那样的“没有这种东西”。一些示例和教程将开发和部署文件打包到一个jar文件中 - 但该jar本质上是一个zip文件,您必须首先从开发文件中分解部署文件。

GWT开发罐子=源罐,

GWT部署=的JavaScript和资源的战争。

在开始进入GWT开发之前,您应该至少有3-6个月的使用JSP,servlet,HTML和javascript编写传统JEE应用程序的经验。这可以帮助你灌输服务器端vs客户端的强烈隔离,战争vs jar,从而理解为什么GWT是首先发明的。你会理解部署过程。

+1

祝福极客,感谢您花时间尝试回答我的问题。然而;我想你错误地理解了我的问题。问题是关于创建一个GWT库模块;一个包含客户端和服务器组件的模块,RequestFactory和UiBinder。请注意,将GWT库模块打包到JAR中,而将具有入口点的常规GWT模块打包到WAR中。我试图打包来自另一个GWT项目的这样的库模块和GWT 失败。我希望这个解释有帮助。 – Cengiz 2012-01-02 10:46:18