Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何配置mvn/Jrebel/wtp/gwt/eclipse以顺利处理服务接口上的更改_Java_Eclipse_Maven_Gwt_Jrebel - Fatal编程技术网

Java 如何配置mvn/Jrebel/wtp/gwt/eclipse以顺利处理服务接口上的更改

Java 如何配置mvn/Jrebel/wtp/gwt/eclipse以顺利处理服务接口上的更改,java,eclipse,maven,gwt,jrebel,Java,Eclipse,Maven,Gwt,Jrebel,我开始使用来自Thomas Broyer的新maven gwt插件研究guice rf活动工件 我对代码进行了一些修改,并在服务器端的GreetingService上添加了一个函数。我沿着路径添加所需的位和字节,直到代码正确地调用greetServer或greetServer方法 我发现,简单的SDM重新编译并不能使该方法在服务器上可用。重新启动Tomcat也无济于事。在eclipse中保存文件没有正确触发编译 最后,运行完整的模块编译成功了 我认为这是一个问题,因为服务的任何变化都可能给你一些

我开始使用来自Thomas Broyer的新maven gwt插件研究
guice rf活动
工件

我对代码进行了一些修改,并在服务器端的
GreetingService
上添加了一个函数。我沿着路径添加所需的位和字节,直到代码正确地调用
greetServer
greetServer
方法

我发现,简单的SDM重新编译并不能使该方法在服务器上可用。重新启动Tomcat也无济于事。在eclipse中保存文件没有正确触发编译

最后,运行完整的模块编译成功了

我认为这是一个问题,因为服务的任何变化都可能给你一些时间在大型项目上喝咖啡。是否有一些我没有做的“技巧”,或者RequestFactory代码生成的复杂性如此之高,以至于我不能简单地使用SDM+JRebel或服务器重启来更改服务接口

更新:如果你打算用maven tomcat目标启动你的tomcat,Thomas所描述的方法(谢谢!)是有效的

UPDATE2:描述了运行wtp/eclipse/mvn/Jrebel的
launcherDir
方法

如果您想使用eclipse wtp tomcat启动器和我所做的JRebel动态编译您的服务器类,JRebel重新加载将不会捕获分散的RF服务名称。
要解决此问题,请将以下JVM属性添加到wtp启动配置(谢谢,Thomas!):

-Dgwt.rf.ServiceLayerCache=false

当服务器接口更改时,会发生以下情况
(EclipseLuna服务版本2(4.4.2),JRebel6.x):

  • 根据需要更改服务和上下文类
    • 您会看到JRebel正在重新加载该类
  • 在命令行上调用
    mvn进程类
    • 您会看到JRebel正在重新加载模糊工厂
  • SDM在浏览器中编译(F5将完成此操作)
    • 您的服务现在正在客户端中工作
将gwt客户端代码与wtp服务器链接

要将codeserver与wtp环境链接,
src/main/webapp
文件夹需要包含您的GWT代码文件夹。 为了实现这一点,必须指示codeserver在正确的位置生成SDM存根。将属性添加到
模块/pom.xml
,如下所示:

<properties>    
    <gwt.launcherDir>${project.build.directory}/gwt/launcherDir</gwt.launcherDir>
</properties>

这样,“在f5上重新编译”工作得非常好和顺利。这最终是eclipse中GWT与maven和JRebel的完全集成。哇!@TBroyer:-)的荣誉

客户端不需要任何特殊的东西。不过,服务器端需要验证工具处理
RequestFactory
及其所有
RequestContext
和代理层次结构

从命令行,在原型的上下文中,这意味着在
*-server
模块上启动
流程类
阶段,例如

mvn process-classes -pl *-server -am
运行
mvntomcat7:run-Denv=dev
时,Tomcat应该检测到类的更改并自动重新加载webapp

然后只需在浏览器中刷新页面,在再次验证(在Tomcat中重新加载webapp会丢失会话/验证)之后,您就可以看到端到端的更改

复制步骤:

  • 创建项目
  • 在一个终端中,启动mvn gwt:codeserver-pl*-client-am
  • 在另一个终端中,启动mvntomcat7:run-pl*-server-am-Denv=dev
  • 打开
    http://localhost:8080
    在浏览器中,登录到webapp,注意客户端应用程序会自动编译(这是GWT 2.7中的新SDM)
  • 编辑
    *-shared/src/main/java/**/GreetingContext.java
    并将
    greetServer
    复制为
    griteserver
  • 类似地,编辑
    *-server/src/main/java/**/GreetingService.java
    并复制
    greetServer
    侮辱服务器
    (将
    Hello
    消息更改为侮辱以感受更改)
  • 编辑
    *-client/src/main/java/**/GreetingActivity.java
    并将对
    greetServer
    的调用替换为对
    greetServer
    的调用(或添加另一个按钮并复制代码)
  • 在另一个终端中,运行
    mvn进程类-pl*-server-am
    ;注意,Tomcat会重新加载webapp
  • 在浏览器中刷新页面,再次登录,并注意客户端应用程序正在重新编译。按一下按钮,你会受到侮辱,而不是打招呼。QED
  • 验证工具可以配置为IDE中的注释处理器;有关详细信息,请参阅。注意Eclipse是出了名的坏(坏?)wrt注释处理;最好不要在编辑器中运行他们称之为处理器的处理器(即递增),而是在完成后触发项目构建(希望这相当于
    mvn流程类
    ),或者您可以从Eclipse中启动
    mvn流程类


    请注意,我建议不要从Eclipse内部启动
    mvn gwt:codeserver
    mvn tomcat7:run
    ,因为Eclipse硬杀死进程,这通常会导致
    codeserver
    保持活动状态(这是一个分叉进程),并且不会运行JVM关闭挂钩或
    ServletContextListener
    contextDestroyed

    可能是注释处理器在更改后没有运行吗?这是服务器所必需的(然后在服务器中重新加载webapp)。客户端应该可以正常工作™ 虽然我必须承认我还没有验证过,但是浏览器刷新了。我会在找到时间后再试。客户端立即工作(虽然必须点击浏览器中的“编译”按钮),但apt编译器没有
    mvn -Dgwt.launcherDir=module-app-server\src\main\webapp gwt:codeserver
    
    mvn process-classes -pl *-server -am