将 NetBeans 中的 JSF 页面热部署到 JBoss 独立

Hot deploy of JSF pages in NetBeans to JBoss standalone

背景

设置如下:

我们可能不会更改工具;我们可能既不使用 Maven 也不使用 JRebel。硬ware 升级也不在范围内。

代码组织

源代码(包括与 Web 相关的文件)检出到:

C:\Apps-Work\Project\Project-Admin\Project-Admin-User-war\

此目录包含一个通用的开发结构(粗体是从存储库中检出的):

JBoss 安装

Web 应用程序服务器安装到:

C:\Apps-Tools\jboss-eap-6.2

问题

开发-部署-测试 周期非常缓慢。测试网页的单个更改可能需要 wards 30 秒。这是当前流程:

  1. 在 NetBeans 中编辑文件。
  2. 保存文件。
  3. Shift+F11运行 >> 清理并构建)。
  4. 切换到浏览器选项卡(http://localhost:9990/console/App.html#deployments)。
  5. 单击替换
  6. 单击选择文件
  7. Select 项目-管理员-用户-war.war 文件。
  8. 单击打开
  9. 单击下一步
  10. 单击保存
  11. 切换到浏览器选项卡(http://localhost:8080/admin/users/)。
  12. F5 重新加载页面。

构建(第 3 步)大约需要 26 秒;手动部署增加了这一点。

这是理想的开发周期:

  1. 更改 NetBeans 中的 JSF 页面(注意:这是从存储库中检出的文件)。
  2. 保存 JSF 页面。
  3. Alt+Tab 到浏览器 window.
  4. F5 重新加载页面。

在 Java 源更改上进行热部署并不重要,因为代码开发时间往往比简单的网页布局更改花费的时间长得多。

编辑 意味着开发人员不再编辑从存储库中检出的文件,因此会导致额外的步骤或脚本,或者可能会丢失工作。

其他人建议 保存时部署 功能,即 disabled:

另一个建议(根据屏幕截图)是 运行 应用程序处于调试模式,但选择 Debug >> Project (Ctrl +F5) 更改后未显示页面更新。

问题

是否可以使用给定的工具和约束热部署 JSF 页面?如果是这样,实现理想开发周期所需的具体步骤是什么?

独立配置

README.txt文件显示可以"live deploy"内容:

H) Manual mode only: Live replace portions of currently deployed unzipped content without redeploying:

cp -r target/example.war/foo.html $AS/standalone/deployments/example.war

Windows 上的 cp 命令转换为:

xcopy /e /s /y src dest

这导致:

  1. 打开命令提示符。
  2. 更改目录:cd C:\Apps-Tools\jboss-eap-6.2\standalone\deployments
  3. 创建 skipdeploy 以防止在复制过程中进行部署:type nul >> Project-Admin-User-war.war.skipdeploy
  4. 复制文件以创建包含已更改文件的目录: xcopy /i /y /e /s C:\Apps-Work\Project\Project-Admin\Project-Admin-User-war\web Project-Admin-User-war.war

下一个:

  1. 删除skipdeploy:rm Project-Admin-User-war.war.skipdeploy
  2. 创建dodeploy:type nul >> Project-Admin-User-war.war.dodeploy
  3. Return到浏览器。
  4. 按F5刷新。

结果是资源包丢失了:

相关

这里是对在 http://wiki.netbeans.org 上发现的 2009 年 Ant 脚本更改的描述。也许还有用。

http://wiki.netbeans.org/TaT_DeployOnBuildUsingJBoss

还有另一个脚本解决方案:

How to setup JBoss server with Netbeans?

概览

使用JBoss6.2 EAP实现热部署运行单机模式分三部分完成:配置、分解、热部署。

配置

确保deployment scanner配置如下:

确保配置了 Web 子系统和系统属性:

  1. 停止 JBoss.
  2. 编辑%JBOSS_HOME%\standalone\configuration\standalone.xml
  3. 立即在 </extensions> 之后(在 <management> 之前),禁用缓存:

    <system-properties>
      <property name="java.net.preferIPv4Stack" value="true"/>
      <property name="org.jboss.as.web.deployment.DELETE_WORK_DIR_ONCONTEXTDESTROY" value="true"/>
    </system-properties>
    
  4. 找到网络子系统(例如,xmlns="urn:jboss:domain:web...)。
  5. 附加以下元素:

    <configuration>
        <jsp-configuration development="true"/>
    </configuration>
    
  6. 保存文件。
  7. 开始JBoss.

爆炸

展开需要提取 WAR 文件的全部内容,其中的内容将在(非常近的)将来部署。

  1. 清理并构建应用程序(NetBeans 中的Shift+F11)。
  2. 更改为 JBoss 独立部署目录。
  3. 创建一个跳过部署文件。
  4. 创建 WAR 目录。
  5. 提取 WAR 文件。
  6. 删除跳过部署文件。
  7. 创建 部署 文件。

这类似于以下内容(在 Windows 平台上;根据需要替换 %JBOSS_HOME% 和 %PROJECT_HOME% 的路径):

cd %JBOSS_HOME%\standalone\deployments
type nul >> Project-Admin-User-war.war.skipdeploy
mkdir Project-Admin-User-war.war
cd Project-Admin-User-war.war
jar -xvf %PROJECT_HOME%\dist\Project-Admin-User-war.war
cd ..
del *skipdeploy
type nul >> Project-Admin-User-war.war.dodeploy

热部署

创建包含以下内容的批处理文件:

cd %JBOSS_HOME%\standalone\deployments
type nul >> Project-Admin-User-war.war.skipdeploy
xcopy /i /y /e /s %PROJECT_HOME%\web Project-Admin-User-war.war
del *skipdeploy
type nul >> Project-Admin-User-war.war.dodeploy

网络开发

理想的开发周期已经基本实现:

  1. 在 NetBeans 中编辑文件。
  2. 保存文件。
  3. 运行批处理文件。
  4. Alt+Tab 到浏览器。
  5. F5刷新

Ant 有一个 OnSaveTask 可以强制转换为 运行 批处理,甚至可以完全替代批处理文件。留作 reader.

的练习