我想知道哪些Java Web应用程序框架提供了"热重新加载"功能,即它允许开发应用程序并将它们"几乎立即"重新部署在服务器上(即,在不到几秒钟内).
在Java世界中,玩!开箱即用,但我正在寻找的是一个更详尽的清单.
我所知道的其他例子包括:Nuxeo WebEngine,前提是你正在使用Eclipse和正确的插件,或者在Python世界中,使用Django和Pylons(当使用该--reload选项时).
我正在使用Eclipse开发SpringMVC和Tomcat的应用程序.问题是:服务器不会更新我正在进行的更改.
一个例子:
@RequestMapping(value = "test", method = RequestMethod.GET)
public ModelAndView test(){
ModelAndView mv = new ModelAndView("test");
System.out.println("test");
return mv;
}
Run Code Online (Sandbox Code Playgroud)
每次我点击映射的URL时,Eclipse都会在我的控制台中打印测试.如果我注释掉println,我会得到相同的结果.
尝试解决问题:
一切都没有效果.看起来Tomcat没有更新我在代码中所做的任何更改.
我正在使用NetBeans 6.8,Tomcat 6和Maven 2.2,并希望在保存文件后立即在浏览器中看到我的代码中的更改(显示http:// localhost:8080).
tomcat-maven-plugin具有以下配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.0-beta-1</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)
在输出之后,它应该执行就地部署.
如何立即在浏览器中查看Java代码中的更改?
据我所知,在OSGi中,您可以在运行时更新jar而无需重新启动服务器.但jboss也有热部署,其中全耳更新并且服务器仍在运行.
那么OSGi在jboss的企业java项目中会带来什么好处呢?
我是Java EE的新手,并且一直在努力解决部署过程的缓慢问题,并想知道我是否做错了什么.我对Django很有经验,其中代码的更改立即发生,似乎热部署Java EE应用程序有点令人困惑 - 有很多事情声称热部署(Glassfish,Eclipse manic hotdeploy,Jetty hotdeploy,JRebel等. ).
我的项目是一个Maven项目,我正在使用Netbeans进行部署.该站点使用Spring,JSF和Hibernate框架.
在Netbeans中,Deploy on Save,根据以下屏幕截图似乎已启用,但点击/取消点击是不可能的,因为它声称从我的pom.xml获取信息(尽管我的pom.xml中没有这样的字段(仅依赖)).

现在,对某些文件的更改似乎立即生效.其中包括: - JSF文件 - 静态文件
对以下需求部署的更改: - 任何XML文件 - 任何属性文件,甚至本地化属性文件 - 任何Java文件
对这些的更改需要我手动部署,重新部署需要半分钟,即使我目前只有2-3个类,基本上只有一个用户类和一个授权类.该项目目前只允许登录,尽管如此,编译大约需要几秒钟; 容器(Glassfish)似乎消耗了大约600 MB的RAM,甚至在几次部署后也会出现PermGen错误,我需要使用任务管理器来终止java进程.(我已经读过这与每次重新部署后的垃圾收集器泄漏有关,我甚至使用jhat生成一个配置文件,但是提供了一个包含数千个类,我的类,Spring,Hibernate类等的列表)
我也听说过jrebel,并尝试运行它,但似乎它与我的Netbeans版本(7.0)不兼容,即使它似乎运行,对任何java文件的任何修改仍然需要重新部署.
有什么办法可以解决这些问题,或者在Java EE中每次更改任何Java文件后等待大约1分钟是否正常?这个问题严重影响了生产力.
这是部署应用程序时的Glassfish输出:http://pastebin.com/7FhZ6AVh
我正在寻找一个简单易用的Java系统,它为我创建了一个REST服务.所以我找到了dropwizard,但据我可以使用谷歌,它发现它缺乏热部署,虽然码头能够这样做.使用maven-shade-plugin时,至少需要10秒才能构建该东西.此外,我的IDE报告说,当涉及shade-plugin时,它不能使用编译保存功能(也就是热部署).
我可以用某种方式使用hotdeployment吗?或者我可以使用什么呢?
更新:如果没有什么能解决这个问题,我可能会使用球衣和guice等的组合,这在本文中有所解释
我有几个关于在开发阶段使用 Docker 的问题。
我将提出三种不同的场景,说明我认为 Docker 可以在开发环境中使用的方式。假设我们正在用 Java 和 Spring Boot 创建一个 REST API。为此,我需要一个 MySQL 数据库。
第一个场景是使用 docker-compose 使用 MySQL 容器进行开发,并使用另一个容器中的 MySQL 和 Java 应用程序 (jar) 进行生产 docker-compose。为了开发,我启动 docker-compose-dev.yml 以仅启动数据库。使用 IDE(例如 IntelliJ Idea)启动和调试应用程序。对代码所做的任何更改,IDE 将通过应用更改来识别并重新启动应用程序。
第二种情况是,对于开发和生产环境,都有一个带有数据库和应用程序容器的 docker-compose。这样,每次我对代码进行更改时,我都必须重建映像,以便将更改加载到映像中并再次启动容器。这种场景可能是最典型的,用于使用 Docker 进行开发,但由于每次发生更改时都需要重建映像,因此看起来很慢。
第三种情况是前两种情况的混合。两个 docker-compose。开发 docker-compose 包含两个容器,但具有允许实时重新加载应用程序、映射卷和使用例如 Spring Dev Tools 的机制。通过这种方式,启动容器,如果文件发生任何更改,应用程序容器将检测到更改并重新启动。对于生产,docker-compose 将简单地使用两个容器创建,但没有实时重新加载的功能。在我看来,这将是理想的情况,但我认为这非常依赖于所使用的技术,因为并非所有技术都允许实时重新加载。
问题如下。
使用 Docker 进行阶段时,以下哪种场景最典型?
场景1是否很好地提出?即仅dockerize 外部服务,如数据库、队列等,使用IDE 进行应用的开发和调试,不使用Docker。
我提出的疑问和场景是在我提出场景 2 的问题之后出现的。随着代码的每次更改,必须重新构建映像并再次启动容器是浪费大量时间。简而言之,一个问题是:如何避免这种情况?
在此先感谢您的时间。
注意:这可能是一个受制于意见的问题,但很高兴知道开发人员通常如何处理这些问题。
development-environment hotdeploy livereload docker docker-compose
最近我们从使用蚂蚁迁移到了maven.在Netbeans中,我曾经在WAR中编辑和保存html,xhtml,javascript,css文件,几乎可以立即在服务器上进行更改.
现在,当我在WAR中编辑并保存这些类型的文件时,没有任何反应.我必须右键单击我的EAR - >使用依赖项构建 - >运行以使更改可用.这个过程需要很长时间
我发现了一些类似的问题,但我仍然感到困惑.
编辑:我刚刚擦除了我的开发环境并从头开始设置.然后我在同事的机器上复制了设置(他在Windows上,我在Ubuntu上).使用相同的设置过程,不同的操作系统,他可以编辑/保存xhtml文件,无需额外步骤即可查看更改!
我的JBoss AS 4.2.3 GA有一个非常烦人的问题.
直到最近一切都运行良好,但现在热部署功能现在更长.并且 - 一如既往 - 我不知道我做了什么导致这种行为.
我的项目是用Maven构建的.我已清理每个目标目录,安装项目,然后将它们部署到服务器.因此,Eclipse中的源代码和服务器上的已部署项目应该完全相同.在一个方法里面我添加了一个简单的System.out.println("test");声明--BANG! - 我收到以下错误:
热代码替换失败 - 未实施方案更改http://imagefruity.com/images/92236289746667737609.png
你知道摆脱困境的方法吗?
我正在使用eclipse服务器功能进行热代码部署.使用tomcat作为Web服务器.但我不确定它是如何工作的.我有自己的理解它必须如何在内部工作.
我的理解: -当开发人员在代码中进行更改(比如类Employee)时,Eclipse会将修改后的编译类放置/发布到正确的位置(必须是特定的Web/app服务器.让我们称之为热部署目录(HDD))在webserver下.现在,Web服务器特定的类加载器将进入图片.它在HDD下找到新条目.现在,它发现类是否已经由perm gen空间中的类加载器加载,webserver将从permgen空间卸载它并在内部加载新的,而不重新启动服务器,以便反映新的更改(字节代码).作为重新加载的一部分,webserver还将现有的Epmloyee对象与perm gen空间中的新类定义链接起来,以便反映新的更改.
我的理解是否正确?
像这样的一些链接说Eclipse热部署只是重新部署的自动化.我认为这意味着eclipse会自动停止服务器,重新发布并重新启动它,而无需开发人员干预.Buti我认为这不正确,因为与start/publish/restart相比,这个过程非常快.此外,如果它是真的,重启后会话和其他活动对象将如何保持活动状态?可能这个链接在过去是真实的但现在不是因为我发现热部署也适用于jar中的类