jetty屬性

jetty 版本信息html

     Jetty7 - 此插件改名爲jetty-maven-plugin,以便更符合maven2的協定。爲了在Web應用作快速應用開發作準備,詳見多Web應用源目錄web

  爲了在Jetty裏運行一個Web應用,你若是按照Maven默認的作法構造(resources文件存放,${basedir}/src/main/webapp下Classes文件存放在${project.build.outputDirectory}下,web.xml的配置描述${basedir}/src/main/webapp/WEB-INF/web.xml),你不須要配置任何其它東西。apache

只需輸入:mvn jetty:runapi

這將在端口爲8080的Jetty服務器上啓動你的項目。Jetty將持續運行,直到插件是明確中止,例如,按下<ctrl-c>,您也可使用mvn jetty:stop命令。服務器

委託這個插件運行Web應用是很是方便的,由於它能夠配置成能按期掃描Web應用的任何改變和自動部署Web應用。這就能夠消除開發週期中編譯和部署的步驟從而更加富有成效。你使用的IDE時對項目作的任何改變,都將直接自動導入到當前運行的web容器裏,使您能夠當即對其進行測試,立竿見影。app

若是無論出於什麼緣由,你總不能運行一個未組合過的web應用吧,在下文討論中提到這個插件一樣也支持jetty:run-war和jetty:run-exploded命令。框架

關於其餘命令的更多信息請查閱Jetty文檔中的mvn jetty:run pagemvn jetty:run-exploded pagemvn jetty:run-war pagewebapp

自動執行插件maven

有時候,例如在作集成測試時,你固然但願在測試開始時自動運行你的項目,測試完成時中止,而不僅是手動的在命令行執行mvn jetty:run吧。ide

要作到這一點,你須要爲jetty 插件建立幾個<execution>腳本,並使用<daemon>true</daemon>配置選項來預防Jetty無限期運行,迫使它只在執行Maven時才運行。

  像下面pom.xml片斷中描述的pre-integration-test和post-integration-test 就是用來觸發執行和關閉Jetty:

<plugin>

        <groupId>org.mortbay.jetty</groupId>

        <artifactId>maven-jetty-plugin</artifactId>

        <version>6.1.10</version>

        <configuration>

                <scanIntervalSeconds>10</scanIntervalSeconds>

                <stopKey>foo</stopKey>

                <stopPort>9999</stopPort>

        </configuration>

        <executions>

                <execution>

                        <id>start-jetty</id>

                        <phase>pre-integration-test</phase>

                        <goals>

                                <goal>run</goal>

                        </goals>

                        <configuration>

                                <scanIntervalSeconds>0</scanIntervalSeconds>

                                <daemon>true</daemon>

                        </configuration>

                </execution>

                <execution>

                        <id>stop-jetty</id>

                        <phase>post-integration-test</phase>

                        <goals>

                                <goal>stop</goal>

                        </goals>

                </execution>

        </executions>

</plugin>

注意:Maven默認都是經過org.apache.maven.plugins的groupId來查找插件的,即便這個groupId跟上面要表達的內容徹底不一樣。爲了更明確的指向這個groupId是咱們須要的插件,惟一的辦法就是在settings.xml也作以下設置:

<profile>

  ...

<pluginGroups>

<pluginGroup>org.mortbay.jetty</pluginGroup>

</pluginGroups>

</profile>

如何經過命令行中止插件

  委託Jetty插件無限期運行的目標包括run、run-war和run-exploded。你能夠在視窗控制終端(如DOS窗口)使用<ctrl-c>關閉它,或者在另外一個視窗控制終端使用stop目標關閉。若是你但願能使用mvn jetty:stop 執行關閉命令,則須要你在插件中配置一個特殊的端口和控制鍵。下面是一個例子配置:

<plugin>

<groupId>org.mortbay.jetty</groupId>

<artifactId>maven-jetty-plugin</artifactId>

<version>6.1.10</version>

<configuration>

<stopPort>9966</stopPort>

<stopKey>foo</stopKey>

</configuration>

</plugin>

開始:

mvn jetty:start

關閉:

mvn jetty:stop

如何配置插件

配置公共的run, run-war run-exploded 目標

  無論你執行哪個Jetty目標,下述的配置參數都是可用的。通常來講它們分爲應用於Web容器的配置和應用於具體web應用的配置:

容器級配置

Connectors 可選.一組org.mortbay.jetty.Connector對象,包含jetty的端口監聽。若是你不指定任何一個NIO的org.mortbay.jetty.nio.SelectChannelConnector,將默認配置一個8080端口。固然,你能夠在命令行使用系統參數jetty.port 改變默認端口。例如"mvn -Djetty.port=9999 jetty:run"。另外,您也能夠指定許多您想要的鏈接。
jettyConfig 可選。除插件配置參數外,你也能夠指定一個jetty.xml文件的路徑。當你有其餘的web應用和操做須要部署時,或者一些你沒法在插件中配置的jetty對象,你就可使用到它,。

scanIntervalSeconds 可選[]在很短的時間間隔內在掃描web應用檢查是否有改變,若是發覺有任何改變則自動熱部署。默認爲0,表示禁用熱部署檢查。任何一個大於0的數字都將表示啓用。

systemPropertie 可選。它們容許你在設置一個插件的執行操做時配置系統屬性.更多的信息請查閱Setting System Properties.

userRealms 可選。一組org.mortbay.jetty.security.UserRealm實現。請注意,它沒有一個默認的Realm。若是你在你的web.xml應用了一個Realm,你須要在這裏指定一個對應的Rleam。

requestLog 可選。一個org.mortbay.jetty.RequestLog請求日誌接口的實現。好比org.mortbay.jetty.NCSARequestLog就是一個做爲NCSA格式的實現。

[譯註:(美國)國家超級計算技術應用中心 (NCSA) 公用格式是經常使用的標準日誌格式]

手動重載

Jetty 6.2.0pre0版本起,添加了一個新的可用組件,用於控制web應用的從新部署。

配置參數:<reload>[manual|automatic]</reload>

當你設置成手動模式後,web應用不會自動的掃描和重部署。相反,用戶能夠控制的Web應用時,經過鍵入」回車換行鍵」重載。當設置成自動模式時,將根據scanIntervalSeconds參數的設置不定時的掃描和自動重部署。你也能經過在命令行使用系統參數
-Djetty.reload 配置選擇重載的模式。

好比:"mvn -Djetty.reload=manual jetty:run" 將強制手動重載,無論pom.xml文件裏如何配置。同理: "mvn -Djetty.reload=automatic -Djetty.scanIntervalSeconds=10 jetty:run" 每隔十秒中後臺將重載一次,而無論pom.xml文件裏如何配置。

Web應用級配置

contextPath 可選。這個contex地址指向你的webapp.默認狀況下,它被設置成該項目的pom.xml的<artifactId>。固然你也能夠設置一個你喜歡的從而覆蓋它。

tmpDir 可選。它做爲web應用的臨時目錄。它默認設置在{${basedir}/target}下,可是你也可在這裏改變它的路徑。

overrideWebXml 可選. 它是一個應用於web應用的web.xml的備用web.xml文件.這個文件能夠存放在任何地方.你能夠根據不一樣的環境中(如測試、開發等等)利用它增長或修改一個web.xml配置.

webDefaultXml 可選. webdefault.xml文件用來代替webapp默認提供給jetty的文件.

從6.1.6rc0發行版開始,一個替代的更靈活的方式是配置web應用時使用webAppConfig元素代替上面列出的那些單獨的參數。使用webAppConfig元素,你能有效的調用org.mortbay.jetty.webapp.WebAppContext類中任何setter方法。下面顯示的列子將展現這個元素跟它上面的例子比較是如何配置一樣的特性的(固然它們還有更多的特性能讓你設置):

<project>

...

<plugins>

    ...

<plugin>

<groupId>org.mortbay.jetty</groupId>

<artifactId>maven-jetty-plugin</artifactId>

<configuration>

<scanIntervalSeconds>10</scanIntervalSeconds>

<!—web應用的配置 -->

<contextPath>/biggerstrongerbetterfaster</contextPath>

<tmpDir>target/not/necessary</tmpDir>

<webDefaultXml>src/main/resources/webdefault.xml</webDefaultXml>

<overrideWebXml>src/main/resources/override-web.xml</overrideWebXml>

          <!—從jetty6.1.6rc0起, 你能用webAppConfig 元素代替

<webAppConfig>

<contextPath>/test</contextPath>

<tempDirectory>${project.build.directory}/work</tempDirectory>

<defaultsDescriptor>src/main/resources/webdefault.xml</defaultsDescriptor>

<overrideDescriptor>src/main/resources/override-web.xml</overrideDescriptor>

</webAppConfig>

          -->

<!—容器的配置 -->

<jettyConfig>/my/special/jetty.xml</jettyConfig>

<connectors>

<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">

<port>9090</port>

<maxIdleTime>60000</maxIdleTime>

</connector>

</connectors>

<userRealms>

<userRealm implementation="org.mortbay.jetty.security.HashUserRealm">

<name>Test Realm</name>

<config>etc/realm.properties</config>

</userRealm>

</userRealms>

<requestLog implementation="org.mortbay.jetty.NCSARequestLog">

<filename>target/yyyy_mm_dd.request.log</filename>

<retainDays>90</retainDays>

<append>true</append>

<extended>false</extended>

<logTimeZone>GMT</logTimeZone>

</requestLog>

</configuration>

</plugin>

</plugins>

</project>


jetty:run的配置

  run目標容許你把你未打包的web應用部署到Jetty.它包含在你的pom.xml文件的一部分元素裏。下面額外的配置參數都是可用到的:

  classesDirectory 這是你的web應用編譯的classes存放的路徑。你不多須要設置這個參數,其實能夠在你的pom.xml用<build><outputDirectory>替代它。

webAppSourceDirectory 默認設置在${basedir}/src/main/webapp下。若是你的源文件夾結構跟左邊不一樣,就能夠設置這個參數。
  webXml 默認設置在${maven.war.webxml}或者${basedir}/src/main/webapp/WEB-INF/web.xml,不管哪一個文件都不是空的。若是以爲前二者都不合適,就設置它。

jettyEnvXml 可選。它指向一個jetty-env.xml文件的路徑。容許你建立JNDI綁定並知足web.xml中<env-entry>、<resource-env-ref>和<resource-ref>元素中的條件。固然這個文件的使用範圍僅僅在你的當前應用和其餘應用同時部署時它並無共享的狀況下。(例如使用一個jettyConfig文件)

scanTargets 可選。週期性的掃描除了插件自動掃描外的文件和文件夾列表。

scanTargetPatterns 可選。若是你想掃描有一長串的額外文件,經過使用模式匹配表達式制定它們更加方便,它能夠用來替代 <scanTargets>參數的枚舉展現。這個參數包含一組<scanTargetPattern>。每個都是由一個<directory>和<includes>[或者<excludes>]參數來指定文件的匹配模式。

下面的示例設置了全部這些參數:

<project>

...

<plugins>

    ...

      <plugin>

        <groupId>org.mortbay.jetty</groupId>

        <artifactId>maven-jetty-plugin</artifactId>

        <configuration>

          <webAppSourceDirectory>${basedir}/src/staticfiles</webAppSourceDirectory>

          <webXml>${basedir}/src/over/here/web.xml</webXml>

          <jettyEnvXml>${basedir}/src/over/here/jetty-env.xml</jettyEnvXml>

          <classesDirectory>${basedir}/somewhere/else</classesDirectory>

          <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 parameter reference

配置jetty:run-war

  這個目標將首先把你的web應用打包成一個war文件,再發布到Jetty。若是你設置掃描間隔爲非零,Jetty將觀察你的pom.xml和war文件。若是有任何變化,它都將從新打包並部署war。

  配置參數的詳細描述以下:

webApp 打包後war的路徑。默認爲${project.build.directory}/${project.build.finalName}.war。若是目標存儲空間不足,設置它到你的自定義路徑下。

詳細設置以下:

<project>

...

<plugins>

    ...

<plugin>

<groupId>org.mortbay.jetty</groupId>

<artifactId>maven-jetty-plugin</artifactId>

<configuration>

<webApp>${basedir}/target/mycustom.war</webApp>

</configuration>

</plugin>

</plugins>

</project>

你也能夠查看jetty:run-war parameter reference.

配置jetty:run-exploded

  這個目標首先裝配你的web應用到exploded-war文件,再發布到Jetty。若是你設置掃描間隔爲非零,Jetty將觀察你的pom.xml, WEB-INF/lib, WEB-INF/classes和WEB-INF/web.xml的改變。若是有必要,它都將從新打包並部署war。

配置參數的詳細描述以下:

webApp exploded-war的路徑。默認在${project.build.directory}/${project.build.finalName},可是能經過設置這個參數,從而覆蓋它。

詳細設置以下:

<project>

...

<plugins>

    ...

<plugin>

<groupId>org.mortbay.jetty</groupId>

<artifactId>maven-jetty-plugin</artifactId>

<configuration>

<webApp>${basedir}/target/myfunkywebapp</webApp>

</configuration>

</plugin>

</plugins>

</project>

你也能夠查看jetty:run-exploded parameter reference.

設置系統屬性

  你能夠爲插件的執行操做按name/value成對的方式指定系統屬性。

  請注意,若是發現有系統屬性已經設置過(例如從命令行或者JVM自己),則這些配置的屬性不會覆蓋它們。

  這個特性在整理命令行和保存一系列的鍵盤鍵入操做時是頗有用的。

  譬如,你一般會須要產生Commons logging:

  mvn -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog jetty:run

  使用了systemProperty配置的命令行能夠再次更簡短的運行mvn jetty:run,看下面的pom.xml :

<project>

...

<plugins>

    ...

<plugin>

<groupId>org.mortbay.jetty</groupId>

<artifactId>maven-jetty-plugin</artifactId>

<configuration>

         ...

<systemProperties>

<systemProperty>

<name>org.apache.commons.logging.Log</name>

<value>org.apache.commons.logging.impl.SimpleLog</value>

</systemProperty>

            ...

</systemProperties>

</configuration>

</plugin>

</plugins>

</project>

注意:你能夠按<name>或者<key>的方式指定<systemProperty>的名稱,使用哪一個按你的喜愛吧。

日誌

  Jetty自己並無依賴一個特定的日誌框架,它使用一個內置的日誌記錄器來輸出標準錯誤。無論怎樣,容許了Jetty和其餘日誌方法集成,若是在類路徑中發現了一個SLF4J日誌的實現,它的使用將優先於Jetty內置的日誌記錄器。

其實Jetty的JSP引擎已經包含了一個日誌依賴。若是你使用JSP 2.0(即你運行的Java虛擬機[JVM]版本<1.5),這個JSP引擎依賴於commons-logging。默認的commons-logging日誌記錄器在記錄信息爲INFO及以上級別[DEBUG,WARN,ERROR]時,將提供插件使用的jcl04-over-slf4jsimple-slf4j的實現。

您能夠忽略這一點,按照下列步驟提供本身的commons-logging:

1. 使用插件中<dependencies>增長一個commons-logging和一個commons-logging的實現到插件類路徑(如log4j)。請注意,若是您想把Jetty 容器的日誌也將發送到這個記錄器,你還應該加上slf4j-jcl這個用於橋接的jar包:

<plugin>

<groupId>org.mortbay.jetty</groupId>

<artifactId>maven-jetty-plugin</artifactId>

<version>6.0-SNAPSHOT</version>

<configuration>

<scanIntervalSeconds>5</scanIntervalSeconds>

</configuration>

<dependencies>

<dependency>

<groupId>commons-logging</groupId>

<artifactId>commons-logging</artifactId>

<version>1.1</version>

<type>jar</type>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-jcl</artifactId>

<version>1.0.1</version>

<type>jar</type>

</dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.13</version>

<type>jar</type>

</dependency>

</dependencies>

      </plugin>

   2.用-Dslf4j=false系統屬性運行插件:

    mvn -Dslf4j=false jetty:run

     注意若是你使用的是log4j,你將須要告訴log4j你配置文件的位置。譬如:

     mvn -Dslf4j=false -Dlog4j.configuration=file:./target/classes/log4j.properties jetty:run

   若是您使用的是JSP2.1 (即你運行的Java虛擬機[JVM]版本>=1.5 ),那太好了,由於這個JSP已經沒有什麼特別的日誌依賴。

相關文章
相關標籤/搜索