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
		    <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
手动重加载
		    <configuration>
		      <reload>manual</reload>
		    </configuration>
			
reload 的可选值 :[automatic|manual]。默认值为 automatic, 它与大于 0 的 scanIntervalSeconds 一起作用, 自动的扫描文件完成热部署的动作。
设为 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 其中的一条记录 :
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 相斥, 用于配置多个静态资源目录
运行多个运用
			<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" />
示例完整配置
			<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>
			

示例代码下载
jetty-config-demo.zip