maven集成jetty插件热部署

一、org.eclipse.jetty插件启动

1.maven依赖

<dependency>
   <groupId>org.eclipse.jetty</groupId>
   <artifactId>jetty-webapp</artifactId>
   <version>9.4.5.v20170502</version>
</dependency>

2.plugin

<plugin>
 <groupId>org.eclipse.jetty</groupId>
 <artifactId>jetty-maven-plugin</artifactId>
 <version>9.4.5.v20170502</version>
 <configuration>
 <httpConnector>
   <port>8080</port>
 </httpConnector>
 <stopKey>shutdown</stopKey>
   <stopPort>9966</stopPort>
   <scanIntervalSeconds>3</scanIntervalSeconds>
   <webApp>
    <contextPath>/ciyo</contextPath>
    <descriptor>src/main/webapp/WEB-INF/web.xml</descriptor>
    <resourceBases>
     <resourceBase>${project.basedir}/src/main/webapp</resourceBase>
    </resourceBases>
   </webApp>
   <requestLog implementation="org.eclipse.jetty.server.NCSARequestLog">
     <filename>target/access-yyyy_mm_dd.log</filename>
     <filenameDateFormat>yyyy_MM_dd</filenameDateFormat>
     <logDateFormat>yyyy-MM-dd HH:mm:ss</logDateFormat>
     <logTimeZone>GMT+8:00</logTimeZone>
     <append>true</append>
     <logServer>true</logServer>
     <retainDays>120</retainDays>
     <logCookies>true</logCookies>
     </requestLog>
  </configuration>
</plugin>

二、Java Main 函数启动

1.maven依赖

<dependency>
   <groupId>org.eclipse.jetty</groupId>
   <artifactId>jetty-webapp</artifactId>
   <version>9.4.5.v20170502</version>
</dependency>
<dependency>
   <groupId>org.eclipse.jetty</groupId>
   <artifactId>jetty-jsp</artifactId>
   <version>9.2.22.v20170606</version>
</dependency>

2.server_config.properties

server.host=0.0.0.0
server.web.port=8080
server.web.warFile=src/main/webapp
server.web.contextPath=/ciyo

3.JettyMainServer

/**   
 * Copyright  2017 公司名. All rights reserved.
 * 
 * @Description: TODO
 * @author: asus   
 * @date: 2017年6月13日 下午7:52:29 
 * @version: V1.0   
 */
package ciyo.peak.web.notify.receive.controller;

import java.io.File;
import java.net.URL;
import java.security.ProtectionDomain;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.eclipse.jetty.webapp.WebAppContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ciyo.peak.common.utils.PropertiesUtil;

public class JettyMainServer {

   private static Logger logger = LoggerFactory.getLogger(JettyMainServer.class);

   public static void main(String[] args) {
      try {
         logger.info("start executor server");
         PropertiesUtil properties = PropertiesUtil.getInstance("server_config");
         Validate.notNull(properties, "properties not load[file=server_config.properties]");
         // 启动http服务
         String contextPath = properties.getPropertyAsString("server.web.contextPath");
         String hostName = StringUtils.defaultString(properties.getPropertyAsString("server.host"), "0.0.0.0");
         int port = properties.getPropertyAsInt("server.web.port");
         String warFile = properties.getPropertyAsString("server.web.warFile");
         Validate.isTrue(port > 0, "port < 0");
         Validate.notBlank(warFile);
         Server server = JettyMainServer.createServer(contextPath, hostName, port, warFile);
         server.start();
         logger.info("start executor server succ");
      } catch (Exception e) {
         logger.error("start executor server error", e);
         System.exit(1);
      }

   }

   /**
    * create server
    * 
    * @param contextPath
    *            context path
    * @param hostName
    *            host name
    * @param port
    *            port
    * @return
    */
   public static Server createServer(String contextPath, String hostName, int port, String warFile) {
      logger.info("createServer params[contextPath={},hostName={},port={},warFile={}]", contextPath, hostName, port,
            warFile);
      // use Eclipse JDT compiler
      System.setProperty("org.apache.jasper.compiler.disablejsr199", "true");
      // threadPool
      QueuedThreadPool threadPool = new QueuedThreadPool();
      threadPool.setMinThreads(10);// default 8
      threadPool.setMaxThreads(200);// default 200
      threadPool.setDetailedDump(false);// default false
      Server server = new Server(threadPool);
      server.setStopAtShutdown(true);
      ProtectionDomain protectionDomain = JettyMainServer.class.getProtectionDomain();
      URL location = protectionDomain.getCodeSource().getLocation();

      WebAppContext context = new WebAppContext(warFile, contextPath);
      context.setClassLoader(Thread.currentThread().getContextClassLoader());
      context.setConfigurationDiscovered(true);
      context.setParentLoaderPriority(true);
      context.setServer(server);
      context.setDescriptor(warFile + "/WEB-INF/web.xml");
      // 设置work dir,war包将解压到该目录,jsp编译后的文件也将放入其中。
      String currentDir = new File(location.getPath()).getParent();
      File workDir = new File(currentDir, "work");
      context.setTempDirectory(workDir);

      server.setHandler(context);

      // HttpConfiguration
      HttpConfiguration http_config = new HttpConfiguration();
      http_config.setSecureScheme("https");
      http_config.setSecurePort(port);
      http_config.setOutputBufferSize(32768);

      // no ssl
      ServerConnector selectChannelConnector = new ServerConnector(server);
      selectChannelConnector.setPort(port);
      if (StringUtils.isNotEmpty(hostName)) {
         selectChannelConnector.setHost(hostName);
      }
      server.setConnectors(new Connector[] { selectChannelConnector });

      return server;
   }
}

3.run启动

时间: 2024-10-31 21:26:56

maven集成jetty插件热部署的相关文章

idea maven jetty插件热部署

maven tomcat插件好像无法进行热部署,jetty可以如下配置实现热部署,但是idea无法进行自动编译,所以需要如下快捷键 Ctrl+Shift+F9,编译 Ctrl+F9,生成项目 <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.1.v20120215</vers

Maven集成jetty插件

本机环境 JDK 7 Maven 3.2 Jetty 8.1.9 Eclipse Luna pom.xml 配置 在你的 pom.xml 文件里加入 jetty 插件的描写叙述信息(查看Jetty很多其它的版本号信息): [...] <build> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</art

IntelliJ + Maven + 内Jetty 实现热部署项目

部署的好处:代码修改后,不必关闭Jetty再重新启动,Maven启动时间不太和谐. 环境: IntelliJ IDEA11.1.4, Maven2.2.1 Jetty8.1.5 步骤: 1,在pom.xml文件中配置jetty插件的参数:scanIntervalSeconds,我的pom.xml片断如下: <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin&

基于tomcat插件的maven多模块工程热部署

内容属原创,转载请注明出处 写在前面的话 最近一直比较纠结,归根结底在于工程的模块化拆分.以前也干过这事,但是一直对以前的结果不满意,这会重操旧业,希望搞出个自己满意的结果. 之前有什么不满意的呢? 1. 基于maven拆分模块后,热部署的效果不好,经常出故障. 2. 对于多个子web工程,不能做到任意一个web工程都可以放到tomcat里运行,要在外面搞个壳子组合多个工程. 于是,有了这纠结的一周,也有了此文. 本文关于什么 如标题所言,本文涉及到如下几个内容: 1. maven多模块工程 2

maven的jetty插件提示No Transaction manager found导致启动慢的解决方法

本文出处:http://blog.csdn.net/chaijunkun/article/details/37923905,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在原始出处查看此文.在使用maven开发web项目极大地方便了jar包的依赖,在测试时也可以集成Servlet容器,从启动速度和量级上看,Jetty无疑是不二选择,然而从8.x开始,如果你的web项目中不包含数据库访问(或者说没有事务管理器)的话,在其启动时会提示找不到事务管理器,输出信息如下: o

maven中jetty插件配置

maven中jetty插件的配置,可用于项目在内置jetty服务器中的部署. <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <configuration> <contextPath>/Demo1</contextPath> <connectors> <conne

maven集成tomcat7插件运行web项目

maven集成tomcat插件运行web项目1.修改pom.xml如下所示:添加依赖servlet,jsp,jstl,tomcat插件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

jetty;tomcat;热部署

[说明]今天上午进行了jetty的插件部署,下午进行了tomcat的插件部署,晚上有其它事情需要回校 一:今日完成 1)搞定插件直接部署到jetty 2)搞定插件直接部署到tomcat 3)了解了一下web服务器和servlet服务器的关系 二:明日计划 1)了解spring的resen风格 三:疑难问题 maven安装的插件安装到哪里去了 四:思考总结 对b/s架构的消息请求和显示流程产生了疑惑,特别是服务器的那块东西 ———————————————————————————————— 在mav

maven plugin在tomcat 热部署

前言: 此处的方法适用于tomcat6 和 tomcat7,对于最新的tomcat8还没有进行过测试,有兴趣的同学可以自己测一下. 总共分为五步: 1.在tomcat中配置用户权限,即添加管理员帐号 2.在maven中添加server,配置tomcat的管理员帐号密码 3.在project中添加插件,以及maven中配置的server, 4.设置部署命令 5.进行部署 下面进行分步骤讲解: 一. 在tomcat中配置用户权限,即添加管理员帐号. 我们需要实现热部署,自然就需要通过maven操作t