Maven Jetty 插件
来源:原创 发布时间:2015-04-11 归档:maven
开发环境 :
JDK 7
Maven 3
Jetty 9
Eclipse Luna
pom.xml
<properties> <jetty.version>9.2.9.v20150224</jetty.version> </properties> <build> <plugins> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>${jetty.version}</version> </plugin> </plugins> </build>
启动 Jetty :mvn jetty:run, 运用访问地址 :http://localhost:8080, 停止 Jetty :Ctrl + C。
取消使用文件缓存
%repository%/org/eclipse/jetty/jetty-webapp/9.2.9.v20150224/jetty-webapp-9.2.9.v20150224.jar
用压缩工具打开它, 找到 jetty-webapp-9.2.9.v20150224.jar/org/eclipse/jetty/webapp/webdefault.xml
用压缩工具打开它, 找到 jetty-webapp-9.2.9.v20150224.jar/org/eclipse/jetty/webapp/webdefault.xml
<init-param> <param-name>useFileMappedBuffer</param-name> <param-value>true</param-value> </init-param>
useFileMappedBuffer 默认是开启的, 这样在 jetty 运行期间, 无法修改 js、css 等静态资源文件。将 true 改为 false, 并重新压缩进 jar 包即可。
端口配置
<configuration> <httpConnector> <port>8081</port> </httpConnector> </configuration>
默认端口 8080, 命令行方式修改端口的命令 :mvn -Djetty.port=8081 jetty:run
自动热部署
<configuration> <scanIntervalSeconds>2</scanIntervalSeconds> </configuration>
默认值为 0。0 表示关闭, 大于 0 表示开启, 单位为秒。以配置的大于 0 的数值为一个周期, 自动的扫描文件检查内容是否有变化, 若有, 则自动重新部署运用。
命令行方式 :mvn -Djetty.scanIntervalSeconds=2 jetty:run
手动重加载
命令行方式 :mvn -Djetty.scanIntervalSeconds=2 jetty:run
<configuration> <reload>manual</reload> </configuration>
reload 的可选值 :[automatic|manual]。默认值为 automatic, 它与大于 0 的 scanIntervalSeconds 一起作用, 自动的扫描文件完成热部署的动作。
设为 manual 的好处是, 当你改变文件内容并保存时, 不会触发自动扫描和重部署动作, 你还可以继续的修改, 直至你在 Console 或命令行键入换行键 (Enter) 才触发重新部署的动作。命令行方式 :mvn -Djetty.reload=manual jetty:run
记录访问日志
设为 manual 的好处是, 当你改变文件内容并保存时, 不会触发自动扫描和重部署动作, 你还可以继续的修改, 直至你在 Console 或命令行键入换行键 (Enter) 才触发重新部署的动作。命令行方式 :mvn -Djetty.reload=manual jetty:run
<configuration> <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>
filename :日志文件名
filenameDateFormat :日志文件名日期格式, 要求日志文件名必须含有 yyyy_mm_dd 串
logDateFormat :日志的时间格式
logTimeZone :时区
append :追加到日志
logServer :记录访问的主机名
retainDays :日志文件保存的天数, 超过删除
logCookies :记录 cookies
access-2015_04_11.log 其中的一条记录 :
转储快照
filenameDateFormat :日志文件名日期格式, 要求日志文件名必须含有 yyyy_mm_dd 串
logDateFormat :日志的时间格式
logTimeZone :时区
append :追加到日志
logServer :记录访问的主机名
retainDays :日志文件保存的天数, 超过删除
logCookies :记录 cookies
access-2015_04_11.log 其中的一条记录 :
localhost 0:0:0:0:0:0:0:1 - - [2015-04-11 23:35:49] "GET /domain HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0" "JSESSIONID=a4ud8iey80cz1rucrh25dfafy"
<configuration> <dumpOnStart>true</dumpOnStart> </configuration>
dumpOnStart 默认值为 false。如果设为 true, jetty 在启动时将拍摄一份转储快照。
webApp 上下文
<configuration> <webApp> <contextPath>/${project.artifactId}</contextPath> <tempDirectory>${project.build.outputDirectory}/tmp</tempDirectory> <!-- <baseResource>${project.basedir}/src/main/webapp</baseResource> --> <resourceBases> <resourceBase>${project.basedir}/src/main/webapp</resourceBase> <resourceBase>${project.basedir}/../res/src/main/webapp</resourceBase> </resourceBases> </webApp> </configuration>
contextPath :上下文路径, 默认为 /
tempDirectory :默认值 ${project.build.outputDirectory}/tmp (target/classes/temp), 所有的 jsp 等的转换和编译都放在这个目录
baseResource :静态资源目录, 默认值 ${project.basedir}/src/main/webapp
resourceBases :与 baseResource 相斥, 用于配置多个静态资源目录
运行多个运用
tempDirectory :默认值 ${project.build.outputDirectory}/tmp (target/classes/temp), 所有的 jsp 等的转换和编译都放在这个目录
baseResource :静态资源目录, 默认值 ${project.basedir}/src/main/webapp
resourceBases :与 baseResource 相斥, 用于配置多个静态资源目录
<configuration> <contextHandlers> <contextHandler implementation="org.eclipse.jetty.maven.plugin.JettyWebAppContext"> <resourceBase>${project.basedir}/../res/src/main/webapp</resourceBase> <contextPath>/res</contextPath> </contextHandler> </contextHandlers> </configuration>
在本示例中, res 是一个独立的 project, 它用于为 app 提供静态资源服务, 具体见附件。
<resourceBase>${project.basedir}/../res/src/main/webapp</resourceBase> 引用资源的方式为 :
<link type="text/css" rel="stylesheet" href="styles/main.css" />
以上配置引用资源文件的方式为 :
<link type="text/css" rel="stylesheet" href="/res/styles/main.css" />
示例完整配置
<link type="text/css" rel="stylesheet" href="styles/main.css" />
以上配置引用资源文件的方式为 :
<link type="text/css" rel="stylesheet" href="/res/styles/main.css" />
<build> <plugins> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>${jetty.version}</version> <configuration> <httpConnector> <port>8081</port> </httpConnector> <reload>manual</reload> <scanIntervalSeconds>2</scanIntervalSeconds> <dumpOnStart>true</dumpOnStart> <webApp> <contextPath>/${project.artifactId}</contextPath> <tempDirectory>${project.build.outputDirectory}/tmp</tempDirectory> <!-- <baseResource>${project.basedir}/src/main/webapp</baseResource> --> <resourceBases> <resourceBase>${project.basedir}/src/main/webapp</resourceBase> <resourceBase>${project.basedir}/../res/src/main/webapp</resourceBase> </resourceBases> </webApp> <contextHandlers> <contextHandler implementation="org.eclipse.jetty.maven.plugin.JettyWebAppContext"> <resourceBase>${project.basedir}/../res/src/main/webapp</resourceBase> <contextPath>/res</contextPath> </contextHandler> </contextHandlers> <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> </plugins> </build>
示例代码下载