jetty轻量级服务器介绍,运行命令及pom配置

我们刚开始接触编程时,运行的都是tomcat服务器,它集成了很多的功能,而在开发及生产环境中这些功能并没有用上,但是在运行时却集成了这些不需要的功能导致服务资源的浪费.

在这样的大环境下,有Google首先开始使用了jetty这样轻量级可配置的服务器.又因为jetty天生与分布式相配合,所以才运用的越来越广泛.

而本文就介绍下最新jetty9.4.16.v20190411版本的相关特性及pom配置,需要Maven 3.3以上版本的插件(本文不包含所有,只列出了博主觉得可能用到或有用的配置)文章末提供源英文地址可自行查看

配置启动项(debug run 或 run中配置)

jetty轻量级服务器介绍,运行命令及pom配置jetty轻量级服务器介绍,运行命令及pom配置

jetty:run

jetty:run-war

jetty:run-exploded

jetty:deploy-war

jetty:run-forked

jetty:run-distro

jetty:start

jetty:stop

jetty:effective-web-xml

Jetty Maven插件可用于快速开发和测试。您可以将它添加到根据Maven POM配置的任何webapp项目中。该插件可以定期扫描项目中的更改,并自动重新部署webapp(启动中的)。通过消除构建和部署步骤,允许您直接测试它们,这使得开发周期更加高效。

jetty更推荐于开发环境而非生成环境

想要快速jetty启动.POM配置

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.4.16.v20190411</version>
</plugin>

run或debug run中配置  mvn jetty:run,运行后可以在http://localhost:8080/访问启动的项目

运行Jetty实例和它部署的webapp的类路径由maven管理,并且可能不会完全符合您的期望。列如:webapp的POM的jar依赖可以通过本地存储库引用,而不是web-inf/lib目录。

配置jetty容器

可配置启动端口:

默认8080, mvn jetty:run -Djetty.http.port=9999 .

idle超时:连接的最大空闲时间.   

可以在标准的jetty xml配置文件中配置连接器,并将其位置放入jetty xml参数中。注意,由于jetty 9.0,不能再在pom.xml中直接配置https连接器:您需要使用jetty xml配置文件来进行配置。

scanIntervalSeconds扫描间隔时间秒

在扫描webapp以检查更改和自动热重新部署(如果检测到任何更改)之间以秒为单位的暂停。默认情况下,这是0,这将禁用热部署扫描。大于0的数字将启用它。

reload重新加载

默认值为“automatic”,与非零的“scantervalseconds”一起使用会在检测到更改时导致自动热重新部署。设置为“手动”,而不是通过在运行插件的控制台中键入换行符来触发扫描。当您进行一系列要在完成之前忽略的更改时,这可能很有用。在这种情况下,使用reload参数。

server

从jetty9.3.1开始为可选:配置插件org.eclipse.jetty.server.server的一个实例,因为插件会自动为您配置一个。特别的,类似于在xml中配置,<configure id=“server”class=“org.eclipse.jetty.server.server”>,那么xml配置将覆盖在pom.xml中配置的内容。

stopPort

可选. 监听端口的 stop 命令. 常用于连接  stop 或 run-forked 命令.

stopKey

可选. 用于为了停止jetty 连接 stopPort . 常用于连接  stop 或 run-forked 命令.

skip

默认值为false。如果为true,则退出插件的执行。与在命令行上设置SystemProperty-djetty.skip相同。这在为集成测试期间的执行配置Jetty并且您希望跳过测试时最有用。

excludedGoals

可选的。将导致插件打印信息性消息并退出的Jetty插件目标名称列表。如果你想阻止用户执行你知道不能与你的项目一起工作的目标,这很有用。

jetty的xml配置没有写.主要介绍Maven的pom配置

但如果你配置了jetty的xml,可以在pom中配置,需要注意这里xml配置的先后顺序也很重要

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.4.16.v20190411</version>
  <configuration>
    <jettyXml>jetty.xml,jetty-ssl.xml,jetty-https.xml等你的jetty的xml配置</jettyXml>
  </configuration>
</plugin>

jetty:run

运行一个war的webapp, Jetty从其来源部署webapp. 它在maven默认项目位置中查找webapp的组成部分,尽管您可以在插件配置中覆盖这些部分。例如,默认情况下,它会查找:

${project.basedir/src/main/webapp}中的资源

${project.build.outputDirectory}中的类

${project.basedir/src/main/webapp/web-inf}中的web.xml/

该插件自动确保在部署之前,重新构建类并更新。如果您更改了类的源代码,并且您的IDE在后台自动编译它,则插件将提取更改后的类。不需要将webapp组装成war,这样可以节省开发周期中的时间。一旦调用,您可以配置插件连续运行,扫描项目中的更改,并在必要时自动执行热重新部署。您所做的任何更改都会立即反映在正在运行的Jetty实例中,使您能够快速地从编码跳到测试,而不是经历以下循环:编码、编译、重新组装、重新部署、测试。

注意:从Jetty 9.4.7开始,当使用Jetty:在多模块构建中运行时,不再需要首先构建构成webapp依赖项的每个模块。因此,如果您的webapp依赖于项目中的其他模块,并且它们同时存在于反应器中,那么jetty将使用它们编译的类,而不是本地maven存储库中的jar文件。

下面是一个示例,它每10秒打开一次更改扫描,并将webapp上下文路径设置为/test:

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.4.16.v20190411</version>
  <configuration>
    <scanIntervalSeconds>10</scanIntervalSeconds>
    <webApp>
      <contextPath>/test</contextPath>
    </webApp>
  </configuration>
</plugin>

配置

除了大多数目标所共有的webapp元素之外,jetty:run目标还支持:

classesDirectory

为webapp编译的类的位置。您应该很少需要设置这个参数。相反,您应该在pom.xml中设置build 

testClassesDirectory

为webapp编译的类的位置。您应该很少需要设置这个参数。相反,您应该在pom.xml中设置build ${project.build.testOutputDirectory}. 

useTestScope

如果为true,则testclassesdirectory中的类和范围“test”的依赖项将首先放置在类路径上。默认情况下,这是false。

webAppSourceDirectory

默认情况下,设置为${project.basedir}/src/main/webapp。如果静态源位于不同的位置,请相应地设置此参数。

jettyEnvXml

可选。定位的一种jetty-env.xml文件,这允许你让bindings JNDI的那satisfy env出入,资源环境资源和参考文献,参考linkages在web.xml,那是scoped只读的webapp不共享与其他的网络应用,你可能被部署在同一时间(例如,通过使用一种“jettyconfig“文件)。

scanTargets

可选的。除了插件自动扫描的文件和目录之外,还需要定期扫描的文件和目录列表。

scanTargetPatterns

可选的。如果您有一长串要扫描的额外文件,使用模式匹配表达式来指定它们会更方便,而不是使用scanTargetsList的scanTargetsList来枚举它们,每个scanTargetsList由一个目录组成,并且包含和/或排除参数来指定文件匹配模式。

scanClassesPattern

自9.3.0起可选。包括和排除可应用于ClassesDirectory以进行扫描的模式,它不会影响ClassPath。如果模式排除了某个文件或目录,则该文件(或目录的子树)中的更改将被忽略,并且不会导致webapp重新部署。模式使用类全局语法指定为相对路径,如javadoc for filesystem.getpathmatcher中所述。

scanTestClassesPattern

从9.3.0开始可选。包括和排除可应用于testclassesdirectory以进行扫描的模式,它不会影响类路径。如果模式排除了某个文件或目录,则该文件(或目录的子树)中的更改将被忽略,并且不会导致webapp重新部署。模式使用类全局语法指定为相对路径,如javadoc for filesystem.getpathmatcher中所述。

<project>
...
  <plugins>
...
    <plugin>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-maven-plugin</artifactId>
      <version>9.4.16.v20190411</version>
      <configuration>
        <webAppSourceDirectory>${project.basedir}/src/staticfiles</webAppSourceDirectory>
        <webApp>
          <contextPath>/</contextPath>
          <descriptor>${project.basedir}/src/over/here/web.xml</descriptor>
          <jettyEnvXml>${project.basedir}/src/over/here/jetty-env.xml</jettyEnvXml>
        </webApp>
        <classesDirectory>${project.basedir}/somewhere/else</classesDirectory>
        <scanClassesPattern>
          <excludes>
             <exclude>**/Foo.class</exclude>
          </excludes>
        </scanClassesPattern>
        <scanTargets>
          <scanTarget>src/mydir</scanTarget>
          <scanTarget>src/myfile.txt</scanTarget>
        </scanTargets>
        <scanTargetPatterns>
          <scanTargetPattern>
            <directory>src/other-resources</directory>
            <includes>
              <include>**/*.xml</include>
              <include>**/*.properties</include>
            </includes>
            <excludes>
              <exclude>**/myspecial.xml</exclude>
              <exclude>**/myspecial.properties</exclude>
            </excludes>
          </scanTargetPattern>
        </scanTargetPatterns>
      </configuration>
    </plugin>
  </plugins>
...
</project>

jetty:run-war

这个目标首先将您的webapp打包为一个war文件,然后将其部署到jetty。如果设置了非零扫描间隔,jetty将监视pom.xml和war文件;如果其中一个更改,它将重新部署war。

jetty:run-exploded

运行目标首先将您的webapp组装成分解的war文件,然后将其部署到jetty。如果设置了非零扫描间隔,jetty会监视pom.xml、`WEB-INF/lib、WEB-INF/和WEB-INF/WEB.xml,以便在必要时进行更改和重新部署。

war

默认值为${project.build.directory}/${project.build.finalName}, 但可以通过设置此参数来覆盖默认值。设置方法如下:

<project>
...
  <plugins>
...
    <plugin>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>maven-jetty-plugin</artifactId>
      <version>9.4.16.v20190411</version>
      <configuration>
        <war>${project.basedir}/target/myfunkywebapp</war>
      </configuration>
    </plugin>
  </plugins>
</project>

jetty:deploy-war

这基本上与jetty:run war相同,但不组装当前模块的war-您可以指定任何要运行的war的位置。与run war不同,这个插件执行的阶段没有绑定到“package”阶段——您可以将它绑定到任何使用它的阶段。

如果为真,则该插件将启动Jetty,但允许继续构建。如果您希望在特定阶段中以执行绑定的形式启动Jetty,然后在另一个阶段停止它,那么这将非常有用。或者,您可以将此参数设置为false,在这种情况下,jetty将阻塞,您需要使用ctrl-c来停止它。

<project>
...
  <plugins>
...
  <plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.4.16.v20190411</version>
    <configuration>
      <war>/opt/special/some-app.war</war>
      <stopKey>alpha</stopKey>
      <stopPort>9099</stopPort>
    </configuration>
    <executions>
      <execution>
        <id>start-jetty</id>
        <phase>test-compile</phase>
        <goals>
          <goal>deploy-war</goal>
        </goals>
      </execution>
      <execution>
        <id>stop-jetty</id>
        <phase>test</phase>
        <goals>
          <goal>stop</goal>
        </goals>
      </execution>
     </executions>
    </plugin>
  </plugins>
</project>

jetty:run-forked

与jetty:run目标不同,jetty:run-forked的目标不会扫描webapp的更改和重新部署。

jetty:run-distro

在Jetty 9.4.8中介绍,此目标允许您在Jetty的本地发行版中执行未组装的webapp。如果你的webapp需要一个高度定制的环境来运行,这是很有用的。如果您的webapp设计为在生产中运行在jetty发行版中,那么这个目标是最接近该环境的。

jetty:start

此目标用于pom.xml中的执行绑定。它类似于jetty:run目标,但是在测试编译阶段之前,它不会首先执行构建,以确保生成webapp的所有必要类和文件。当您希望通过pom.xml中的执行绑定控制Jetty的启动和停止时,这是最有用的。

 

源文:https://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html