我正在开发一个Java EE应用程序,我在开发期间在本地JBoss安装上反复部署。我希望通过将我的应用程序直接热部署到[JBOSS] / server / default / deploy / myApp
来加速构建它似乎有效 - 但是在硬部署和JBoss开始使用新类之间似乎也有一些任意的延迟。我对JBoss不太熟悉,但我认为它会缓存类,这就是导致问题的原因。
我是否正确,如果是的话,我如何让JBoss刷新它的缓存?
答案 0 :(得分:108)
我的捆绑包中遇到了同样的问题:( Eclipse IDE + JBoss服务器适配器)+ JBoss AS 7.0.1(社区项目)。
我的解决方案非常简单 - 您应该转到JBoss管理面板(默认为localhost:9990),在配置文件设置中打开Core - Deployment Scanners。打开Autodeploy-Exploded(设置为true),根据您的意愿,您可以设置扫描时间(默认为5000毫秒)以适合您(我设置为2000,以便在我对项目进行更改时在Eclipse中进行更快速的增量发布) 。而已。现在JBoss不仅为HTML(JSF,XHTML等)文件进行HOT部署,还负责处理POJO类(bean等)文件。
答案 1 :(得分:8)
不幸的是,这并不容易。在JBoss的幕后有更复杂的事情(大多数是与ClassLoader相关的)会阻止你热插入你的应用程序。
例如,如果您的某些班级签名发生变化,您将无法进行热交付。
到目前为止,使用MyEclipse IDE(Eclipse的付费分发版)是我发现的唯一能够非常成功地进行热部署的东西。但不是100%的准确性。但肯定比JBoss Tools,Netbeans或任何其他基于Eclipse的解决方案更好。
如果你想看一下,我一直在寻找免费工具来完成你在StackOverflow中asking人所描述的内容。
答案 2 :(得分:6)
你应该试试JRebel,它可以很好地进行热部署。有点贵,但物有所值。他们有试用版。
答案 3 :(得分:2)
热部署仅对应用程序的静态部分(jsf,xhtml等)的更改是稳定的。
这是一个有效的解决方案,根据 JBoss AS 7.1.1.Final :
完成后,不要忘记将这些更改复制到您的实际开发环境中,重建并重新部署。
答案 4 :(得分:2)
只是我的两分钱:
冷部署是在停止(或停止整个服务器)时部署应用程序的方式,然后安装新版本,最后重新启动应用程序(或启动整个服务器)。它适用于官方生产部署,但在开发过程中这样做会很慢。如果你这样做,请忘记快速发展。
自动部署是服务器必须定期为新EAR / WAR重新扫描并在幕后为您自动部署它,或者为IDE(Eclipse)自动部署它的能力在对源代码进行更改时,自动部署整个应用程序。 JBoss做到了这一点,但JBoss的营销部门称之为误导性的" 热部署"。与冷部署相比,自动部署的速度并不慢,但与热部署相比,速度非常慢。
热门部署是您在键入"时可以在幕后部署" 的功能。进行更改时无需重新部署整个应用程序。热部署仅部署更改。你改变了一个Java源代码,瞧!它已经运行了。你从来没有注意到它正在部署它。 JBoss不能这样做,除非你买JRebel(或类似的),但这对我来说太多了(我便宜)。
现在我的销售宣传" :d 强>
在开发过程中使用 Tomcat 怎么样?全天配备热部署 ...免费。我在开发期间一直这样做,然后在WebSphere,JBoss或Weblogic上部署。不要误会我的意思,这三个对于生产很有帮助,但对于本地机器的快速开发来说真的很棒。如果你整天使用这三种产品,开发效率会下降。
根据我的经验,我停止使用WebSphere,JBoss和Weblogic进行快速开发。我仍然将它们安装在我的本地环境中,但仅限于我可能需要运行的偶尔测试。在我获得极佳的开发速度的同时,我不会为JRebel付费。我是否提到Tomcat与JBoss完全兼容?
Tomcat是免费的,不仅可以自动部署,还可以在Eclipse中键入REAL热部署(Java代码,JSP,JSF,XHTML)(是的,您阅读良好)。 MYKong有一个页面(https://www.mkyong.com/eclipse/how-to-configure-hot-deploy-in-eclipse/),详细说明了如何设置它。
你喜欢我的销售宣传吗?
干杯!
答案 5 :(得分:1)
我遇到了同样的问题,但我想我现在已经掌控了它。
您使用的是eclipse或命令行还是??
当我使用命令行时,我认为我做了“缝合干净”或“接缝取消部署”,或者甚至可能是“缝线重启”,然后是“接缝爆炸”。我可能曾经一次尝试过所有这些,从不打扰每个人做什么。
我们的想法是从两个地方删除已部署的war文件
1. $JBOSS_HOME/server/default/deploy
2. $PROJECT_HOME/exploded_archives
我很确定“缝合取消部署”会移除第一个并且“缝隙清理”会移除第二个。
当我使用eclipse(我使用免费的)时,我首先关闭“Project / Build Automatically” 然后,当我准备好部署时,我会根据我改变的内容执行Project / Build Project或Project / Build All。当我更改xhtml时,Build Project就足够了。当我改变java源代码Build All工作。它们可能会做同样的事情而且差异在我的想象中,但这些东西的某些组合对你有用。
你必须观察输出。有时候应用程序不会被清理或取消部署。这将导致您无法看到您的更改。有时我先关闭服务器,然后重建/清理/部署项目。
希望这有帮助。
TDR
答案 6 :(得分:1)
在link上找到解决方案:
怎么做:
当我修改页面(网页)时,我会更新,当我刷新网页浏览器时:我的mod就在那里。 我确实为自动扫描配置了Jboss(不确定它确实有帮助)
答案 7 :(得分:0)
实际上我的问题是命令行mvn实用程序由于某种原因不会看到更改。我打开了部署扫描程序中的自动部署,但仍然没有区别。但是......我在Eclipse环境中徘徊,因为我为它的Servers窗口添加了一个JBoss服务器,我发现我能够在我的工作区中“添加或删除...”模块。每当我对代码进行更改时添加项目,部署扫描程序检测到代码更改,JBoss就会通过更新代码的循环!像魅力一样。
以下是设置此步骤所需的步骤;
首先,如果您还没有这样做,请使用File-> New-> Other-> Server将您的JBoss服务器添加到Eclipse中,然后通过添加JBoss AS 7服务器的动作。确保找到您正在使用的目录。
添加后,向下看Eclipse附近的“Servers”选项卡。你应该看到你的JBoss服务器。突出显示它并查找“添加或删除...”。从那里你应该看到你的项目。
添加后,对代码进行一些小改动,然后观察JBoss为您进行热点部署。
答案 8 :(得分:0)
我一直在用Eclipse和Wildfly开发一个项目,由于部署了我在应用程序中需要的所有第三方库,爆炸的EAR文件变得越来越大。我将部署指向我的Maven存储库,我猜每次都会重新复制这些存储库。因此,当我在服务层更改Java代码时重新部署应用程序变成了一场噩梦。
然后转向Hotswap代理,这对于在不重新部署应用程序的情况下看到EJB代码的更改有很大帮助。
但是我最近升级到Wildfly 10,Java 8和JBoss Developer Studio 10,在此过程中我花时间移动所有第三方应用程序jar,例如进入Wildfly模块的主要部分,我从部署配置中删除了我的Maven repo。现在重新部署整个应用程序,这是一个非常大的应用程序,只需几秒钟,它比以前快得多。我甚至觉得不需要安装Hotswap,也不想冒任何风险。
因此,如果您使用Wildfly在Eclipse下构建,那么使用Wildfly模块让您的应用程序远离第三方库,您将会更好。
答案 9 :(得分:0)
Netbeans 8.02和8.1 IDE和JBOSS EAP 6.4的解决方案:
如果您使用的是MAVEN,netbeans会将文件和maven复制文件编译到./target目录。您需要创建从。\ target到JBOSS_HOME \ standalone \ deployments的符号链接。在windows下,一个示例命令是
cd %JBOSS_HOME%\standalone\deployments
mklink /d MyWebApplication.war %PROJECTS_HOME%\MyWebApplication\target\MyWebApplication-1.0.0
以上创建了从%JBOSS_HOME%\standalone\deployments\MyWebApplication.war
到\target\MyWebApplication-1.0.0
的符号链接,maven在编译后或jsp,html或任何其他文件更改后传输所有文件。
最后要考虑的是在%JBOSS_HOME%\ standalone \ deployments中创建一个CentralManagement.war.dodeploy
文件。该文件将告诉JBOSS将war“文件”部署为Web应用程序
答案 10 :(得分:0)
以调试模式启动服务器,它将跟踪方法内的更改。其他更改它会要求重新启动模块。
答案 11 :(得分:0)
我正在使用 JBoss AS 7.1.1.Final 。在我的web.xml中添加以下代码片段有助于我动态更改jsp文件:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>development</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
希望这会有所帮助。!!
答案 12 :(得分:0)
将应用程序部署为爆炸(project.war文件夹),添加到您的web.xml:
<web-app>
<context-param>
<param-name>org.jboss.weld.development</param-name>
<param-value>true</param-value>
</context-param>
每次部署时更新web.xml时间(追加空白行):
set PRJ_HOME=C:\Temp2\MyProject\src\main\webapp
set PRJ_CLSS_HOME=%PRJ_HOME%\WEB-INF\classes\com\myProject
set JBOSS_HOME= C:\Java\jboss-4.2.3.GA-jdk6\server\default\deploy\MyProject.war
set JBOSS_CLSS_HOME= %JBOSS_HOME%\WEB-INF\classes\com\myProject
copy %PRJ_CLSS_HOME%\frontend\actions\profile\ProfileAction.class %JBOSS_CLSS_HOME%\frontend\actions\profile\ProfileAction.class
copy %PRJ_CLSS_HOME%\frontend\actions\profile\AjaxAction.class %JBOSS_CLSS_HOME%\frontend\actions\profile\AjaxAction.class
ECHO.>>%JBOSS_HOME%\WEB-INF\web.xml
答案 13 :(得分:0)
这适用于Eclipse Mars和WildFly 11.在服务器下双击WildFly服务器以打开配置页面。在概述标签中 - &gt;发布,选择“资源更改时自动发布”并将间隔设置为1.接下来,“概述”选项卡 - &gt;应用程序重新加载行为,取消选中使用默认模式并将模式设置为\.jar$|\.class$
。在“部署”选项卡中,取消选中“将项目部署为压缩存档”。希望这会有所帮助。
答案 14 :(得分:0)
如果您正在使用Eclipse IDE,则有一个免费插件Manik-Hotdeploy。
此插件可让您将Eclipse工作区与wildfly部署文件夹连接。完成Maven构建后,您的工件(例如战争或耳朵)将被自动推送到服务器的部署文件夹中。网络内容文件(例如.xhtml .jsf ...)也将被热部署。
该插件可用于野蝇,玻璃鱼和payara。
阅读JBoss/Wildfly Support部分以了解更多详细信息。
答案 15 :(得分:-6)
使用Ant脚本并进行目标部署。
部署目标应该:
==&GT;在测试期间进行后续部署后,没有缓存+也没有内存不足问题。