`

Jetty 热部署

阅读更多

Jetty 版本信息

 

     Jetty7 - 此插件更名为jetty-maven-plugin,以便更符合maven2的协定。为了在Web应用做快速应用开发做准备,详见Web应用源目录

  为了在Jetty里运行一个Web应用,你如果按照Maven默认的做法构造(resources文件存放,${basedir}/src/main/webappClasses文件存放在${project.build.outputDirectory}下,web.xml的配置描述${basedir}/src/main/webapp/WEB-INF/web.xml),你不需要配置任何其它东西。

 只需输入:mvn jetty:run

    这将在端口为8080Jetty服务器上启动你的项目。Jetty将持续运行,直到插件是明确停止,例如,按下<ctrl-c>,您也可以使用mvn jetty:stop命令。

   委托这个插件运行Web应用是非常方便的,因为它可以配置成能定期扫描Web应用的任何改变和自动部署Web应用。这就可以消除开发周期中编译和部署的步骤从而更加富有成效。你使用的IDE时对项目做的任何改变,都将直接自动导入到当前运行的web容器里,使您可以立即对其进行测试,立竿见影。

   如果不管出于什么原因,你总不能运行一个未组合过的web应用吧,在下文讨论中提到这个插件同样也支持jetty:run-warjetty:run-exploded命令。

    关于其他命令的更多信息请查阅Jetty文档中的mvn jetty:run pagemvn jetty:run-exploded pagemvn jetty:run-war page

自动执行插件

   有时候,例如在做集成测试时,你当然希望在测试开始时自动运行你的项目,测试完成时停止,而不只是手动的在命令行执行mvn jetty:run吧。

   要做到这一点,你需要为jetty 插件创建几个<execution>脚本,并使用<daemon>true</daemon>配置选项来预防Jetty无限期运行,迫使它只在执行Maven时才运行。

  像下面pom.xml片段中描述的pre-integration-testpost-integration-test 就是用来触发执行和关闭Jetty

<plugin>

        <groupId>org.mortbay.jetty</groupId>

        <artifactId>maven-jetty-plugin</artifactId>

        <version>6.1.10</version>

        <configuration>

                <scanIntervalSeconds>10</scanIntervalSeconds>

                <stopKey>foo</stopKey>

                <stopPort>9999</stopPort>

        </configuration>

        <executions>

                <execution>

                        <id>start-jetty</id>

                        <phase>pre-integration-test</phase>

                        <goals>

                                <goal>run</goal>

                        </goals>

                        <configuration>

                                <scanIntervalSeconds>0</scanIntervalSeconds>

                                <daemon>true</daemon>

                        </configuration>

                </execution>

                <execution>

                        <id>stop-jetty</id>

                        <phase>post-integration-test</phase>

                        <goals>

                                <goal>stop</goal>

                        </goals>

                </execution>

        </executions>

</plugin>

 

         注意Maven默认都是通过org.apache.maven.pluginsgroupId来查找插件的,即使这个groupId跟上面要表达的内容完全不同。为了更明确的指向这个groupId是我们需要的插件,唯一的办法就是在settings.xml也做如下设置:

       <profile>

                 ...

                                       <pluginGroups>

                                         <pluginGroup>org.mortbay.jetty</pluginGroup>

                                       </pluginGroups>

</profile>

 

如何通过命令行停止插件

  委托Jetty插件无限期运行的目标包括runrun-warrun-exploded。你可以在视窗控制终端(如DOS窗口)使用<ctrl-c>关闭它,或者在另一个视窗控制终端使用stop目标关闭。如果你希望能使用mvn jetty:stop 执行关闭命令,则需要你在插件中配置一个特殊的端口和控制键。下面是一个例子配置:

<plugin>

        <groupId>org.mortbay.jetty</groupId>

        <artifactId>maven-jetty-plugin</artifactId>

        <version>6.1.10</version>

        <configuration>

          <stopPort>9966</stopPort>

          <stopKey>foo</stopKey>

        </configuration>

</plugin>

开始:

mvn jetty:start

关闭:

mvn jetty:stop

如何配置插件

配置公共的run, run-war run-exploded 目标

  不管你执行哪一个Jetty目标,下述的配置参数都是可用的。一般来说它们分为应用于Web容器的配置和应用于具体web应用的配置:

容器级配置

           Connectors 可选.一组org.mortbay.jetty.Connector对象,包含jetty的端口监听。如果你不指定任何一个NIOorg.mortbay.jetty.nio.SelectChannelConnector将默认配置一个8080端口。当然,你可以在命令行使用系统参数jetty.port 改变默认端口。例如"mvn -Djetty.port=9999 jetty:run"。另外,您也可以指定许多您想要的连接。  
         
jettyConfig 可选。除插件配置参数外,你也可以指定一个jetty.xml文件的路径。当你有其他的web应用和操作需要部署时,或者一些你无法在插件中配置的jetty对象,你就可以使用到它,

             scanIntervalSeconds 可选[]在很短的时间间隔内在扫描web应用检查是否有改变,如果发觉有任何改变则自动热部署。默认为0,表示禁用热部署检查。任何一个大于0的数字都将表示启用。

              systemPropertie 可选。它们允许你在设置一个插件的执行操作时配置系统属性.更多的信息请查阅Setting System Properties.

              userRealms 可选。一组org.mortbay.jetty.security.UserRealm实现。请注意,它没有一个默认的Realm。如果你在你的web.xml应用了一个Realm,你需要在这里指定一个对应的Rleam

              requestLog 可选。一个org.mortbay.jetty.RequestLog请求日志接口的实现。比如org.mortbay.jetty.NCSARequestLog就是一个作为NCSA格式的实现。

[注:(美国)国家超级计算技术应用中心 (NCSA) 公用格式是常用的标准日志格式]

 

手动重载

Jetty 6.2.0pre0版本起,添加了一个新的可用组件,用于控制web应用的重新部署。

配置参数:<reload>[manual|automatic]</reload>

当你设置成手动模式后,web应用不会自动的扫描和重部署。相反,用户可以控制的Web应用时,通过键入回车换行键重载。当设置成自动模式时,将根据scanIntervalSeconds参数的设置不定时的扫描和自动重部署。你也能通过在命令行使用系统参数
-Djetty.reload 配置选择重载的模式。

比如:"mvn -Djetty.reload=manual jetty:run" 将强制手动重载,不管pom.xml文件里如何配置。同理: "mvn -Djetty.reload=automatic -Djetty.scanIntervalSeconds=10 jetty:run" 每隔十秒中后台将重载一次,而不管pom.xml文件里如何配置。

 

Web应用级配置

             contextPath 可选。这个contex地址指向你的webapp.默认情况下,它被设置成该项目的pom.xml<artifactId>。当然你也可以设置一个你喜欢的从而覆盖它。

             tmpDir 可选。它作为web应用的临时目录。它默认设置在{${basedir}/target}下,但是你也可在这里改变它的路径。

             overrideWebXml 可选. 它是一个应用于web应用的web.xml的备用web.xml文件.这个文件可以存放在任何地方.你可以根据不同的环境中(如测试、开发等等)利用它增加或修改一个web.xml配置.

             webDefaultXml 可选. webdefault.xml文件用来代替webapp默认提供给jetty的文件.

6.1.6rc0发行版开始,一个替代的更灵活的方式是配置web应用时使用webAppConfig元素代替上面列出的那些单独的参数。使用webAppConfig元素,你能有效的调用org.mortbay.jetty.webapp.WebAppContext类中任何setter方法。下面显示的列子将展示这个元素跟它上面的例子比较是如何配置同样的特性的(当然它们还有更多的特性能让你设置)

<project>

 ...

 <plugins>

    ...

      <plugin>

        <groupId>org.mortbay.jetty</groupId>

        <artifactId>maven-jetty-plugin</artifactId>

        <configuration>

          <scanIntervalSeconds>10</scanIntervalSeconds>

          <!—web应用的配置 -->

          <contextPath>/biggerstrongerbetterfaster</contextPath>

          <tmpDir>target/not/necessary</tmpDir>

          <webDefaultXml>src/main/resources/webdefault.xml</webDefaultXml>

          <overrideWebXml>src/main/resources/override-web.xml</overrideWebXml>

          <!—jetty6.1.6rc0, 你能用webAppConfig 元素代替

          <webAppConfig>

            <contextPath>/test</contextPath>

            <tempDirectory>${project.build.directory}/work</tempDirectory>

            <defaultsDescriptor>src/main/resources/webdefault.xml</defaultsDescriptor>

            <overrideDescriptor>src/main/resources/override-web.xml</overrideDescriptor>

          </webAppConfig>

          -->

          <!—容器的配置 -->

          <jettyConfig>/my/special/jetty.xml</jettyConfig>

         <connectors>

            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">

              <port>9090</port>

              <maxIdleTime>60000</maxIdleTime>

            </connector>

          </connectors>

          <userRealms>

            <userRealm implementation="org.mortbay.jetty.security.HashUserRealm">

              <name>Test Realm</name>

              <config>etc/realm.properties</config>

            </userRealm>

          </userRealms>

          <requestLog implementation="org.mortbay.jetty.NCSARequestLog">

            <filename>target/yyyy_mm_dd.request.log</filename>

            <retainDays>90</retainDays>

            <append>true</append>

            <extended>false</extended>

            <logTimeZone>GMT</logTimeZone>

          </requestLog>

        </configuration>

      </plugin>

 </plugins>

</project>


jetty:run的配置

  run目标允许你把你未打包的web应用部署到Jetty.它包含在你的pom.xml文件的一部分元素里。下面额外的配置参数都是可用到的:

  classesDirectory 这是你的web应用编译的classes存放的路径。你很少需要设置这个参数,其实可以在你的pom.xml<build><outputDirectory>替代它。

webAppSourceDirectory 默认设置在${basedir}/src/main/webapp下。如果你的源文件夹结构跟左边不同,就可以设置这个参数。
  webXml 
默认设置在${maven.war.webxml}或者${basedir}/src/main/webapp/WEB-INF/web.xml,无论哪个文件都不是空的。如果觉得前两者都不合适,就设置它。

          jettyEnvXml 可选。它指向一个jetty-env.xml文件的路径。允许你创建JNDI绑定并满足web.xml<env-entry><resource-env-ref><resource-ref>元素中的条件。当然这个文件的使用范围仅仅在你的当前应用和其他应用同时部署时它并没有共享的情况下。(例如使用一个jettyConfig文件)    

          scanTargets 可选。周期性的扫描除了插件自动扫描外的文件和文件夹列表。

          scanTargetPatterns 可选。如果你想扫描有一长串的额外文件,通过使用模式匹配表达式制定它们更加方便,它可以用来替代 <scanTargets>参数的枚举展示。这个参数包含一组<

分享到:
评论
1 楼 hjp222 2011-10-16  
scanIntervalSeconds 是重新启动,并非真正的热部署

相关推荐

    Intellij IDEA下建立maven管理的web项目,配置jetty热部署

    Intellij IDEA 下建立 Maven 管理的 Web 项目,配置 Jetty 热部署 在本文中,我们将学习如何使用 Intellij IDEA 建立一个基于 Maven 管理的 Web 项目,并配置 Jetty 热部署。 知识点 1:Intellij IDEA 中的 Maven ...

    maven多模块项目+jetty热部署实例源码

    ** Jetty热部署 ** Jetty是一款轻量级的Java Web服务器和Servlet容器,支持热部署,即在不重启服务器的情况下更新Web应用。在开发过程中,热部署可以显著提高开发效率。 1. **集成Jetty到Maven** - 添加Jetty ...

    maven项目下用 jetty 启动热部署

    在Maven项目中启用Jetty热部署,主要涉及以下几个关键步骤和知识点: 1. **添加Jetty插件依赖**:首先,在项目的`pom.xml`文件中,我们需要添加Jetty Maven插件的依赖。这可以通过在`&lt;build&gt;`标签内添加`&lt;plugins&gt;`...

    【推荐】Javarebel解决jetty热部署

    【推荐】Javarebel解决jetty热部署

    eclipse + maven多模块项目 + SpringMVC + jetty热部署实现验证码图片实例源码

    应网友要求,重新整理原《eclipse + maven多模块项目框架 + jetty热部署的实例源码》,增加了各配置的详细注释。 并且基于Spring MVC提供了一个完整功能:实现了生成验证码图片,以及验证输入是否匹配的两个接口,...

    IntelliJ IDEA中SpringBoot项目通过devtools实现热部署的方法

    IntelliJ IDEA中SpringBoot项目通过devtools实现热部署的方法 1. 添加devtools依赖项:在pom.xml文件中添加spring-boot-devtools依赖项,以便在IntelliJ IDEA中使用热部署功能。 知识点:spring-boot-devtools是...

    jetty hot deploy.zip

    下面将详细解释Jetty热部署的工作原理、配置方法以及它在开发和生产环境中的应用。 Jetty是一个开源的HTTP服务器和Servlet容器,广泛用于小型到大型的Java Web应用。Hot Deploy(热部署)是Jetty提供的一项强大功能...

    Eclipse3.6与m2eclipse,run-jetty-run插件对WEB项目进行热部署以及在jar源码中进行调试

    Eclipse3.6与m2eclipse,run-jetty-run插件对WEB项目进行热部署以及在jar源码中进行调试

    JettY 部署Web应用程序.doc

    通过修改配置文件的最后修改时间,可以触发Jetty重新加载配置,从而实现Web应用的热更新。 总结来说,Jetty的部署机制灵活且高效,既支持简单快速的静态部署,也支持动态调整的高级部署策略,使其成为开发和测试...

    eclipse修改代码后热部署(不需要重启服务

    5. 配置Tomcat或Jetty服务器:对于某些服务器,比如Tomcat,你可以在其配置文件(如server.xml)中修改部署描述符,启用热部署特性。例如,可以添加或修改`&lt;Context&gt;`标签中的`reloadable="true"`属性。 6. 使用...

    java热部署工具

    通常,Java应用服务器如Tomcat、Jetty、JBoss等都提供了一定程度的热部署支持。以标题中的"jbos热部署"为例,JBoss是Red Hat公司的一个开源企业级应用服务器,它包含了对热部署的支持。 JBoss的热部署机制主要通过...

    轻松利用Jrebel实现热部署(测试容器:jetty)

    NULL 博文链接:https://jiasky.iteye.com/blog/1010948

    run-jetty-updatesite1.zip

    《Jetty插件及其在Eclipse中的热部署实践》 Jetty是一款轻量级的Java Web服务器和Servlet容器,以其高效、小巧、易用而深受开发者喜爱。与Tomcat相比,Jetty同样支持热部署功能,允许开发者在不重启服务器的情况下...

    IntelliJ+Maven+Jetty+Jrebel实现web项目java代码更改后热部署

    "IntelliJ+Maven+Jetty+Jrebel"的组合正是为了解决这一问题,实现Web项目的Java代码更改后能够自动热部署。这个解决方案集成了几个关键工具,包括: 1. **IntelliJ IDEA**: 这是一款强大的Java集成开发环境(IDE)...

    maven工程在Jetty服务器上的自动化部署(开发者模式)

    描述虽然为空,但根据标题我们可以推测,内容可能涵盖如何配置Maven的插件,以自动化构建和启动Jetty服务器,以及如何设置开发者友好的工作流程,如热部署和错误调试。 **详细知识点** 1. **Maven基础**:Maven是...

    idea热部署文件.rar

    在IT行业中,热部署是一种非常实用的技术,尤其是在开发阶段,它可以极大地提高开发效率。热部署允许开发者在不重启应用服务器的情况下更新代码,节省了宝贵的测试和调试时间。本篇文章将详细探讨热部署的概念、原理...

    热部署配置包、使用文档

    热部署是开发过程中提高效率的一种重要技术,尤其是在Java开发中,它允许开发者在不重启应用服务器的情况下,实时更新代码并看到改动的效果。标题中的“热部署配置包、使用文档”表明这是一个包含配置和指南的资源,...

    eclipse 热部署插件

    为了解决这个问题,"热部署"技术应运而生,而"Eclipse热部署插件"就是专门用于实现这一目的的工具。 热部署(Hot Deployment)允许开发者在不关闭或重启应用服务器的情况下,实时更新应用程序的代码,大大提高了...

Global site tag (gtag.js) - Google Analytics