jetty轻量级服务器介绍,运行命令及pom配置
我们刚开始接触编程时,运行的都是tomcat服务器,它集成了很多的功能,而在开发及生产环境中这些功能并没有用上,但是在运行时却集成了这些不需要的功能导致服务资源的浪费.
在这样的大环境下,有Google首先开始使用了jetty这样轻量级可配置的服务器.又因为jetty天生与分布式相配合,所以才运用的越来越广泛.
而本文就介绍下最新jetty9.4.16.v20190411版本的相关特性及pom配置,需要Maven 3.3以上版本的插件(本文不包含所有,只列出了博主觉得可能用到或有用的配置)文章末提供源英文地址可自行查看
配置启动项(debug run 或 run中配置)
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