[轉] Maven Jetty Plugin 配置指南

      Jetty7 已把此插件改名爲 jetty-maven-plugin ,以便更符合 maven2 的協定。 html

      在控制檯輸入mvn jetty:run命令會在端口8080上啓動你的項目。Jetty將持續運行,直到插件是明確中止,例如按下<ctrl-c>,您也可使用mvn jetty:stop命令來中止。web

      委託這個插件運行Web應用是很是方便的,由於它能夠配置成按期掃描Web應用的任何改變和自動部署Web應用。這就能夠消除開發週期中編譯和部署的步驟, 從而提升開發效率shell

      無論出於什麼緣由,你總不能運行一個未打包的web應用吧。 下面討論如何利用etty:run-warjetty:run-exploded命令進行打包部署。關於其餘命令的更多信息, 請查閱Jetty文檔中的mvn jetty:run pagemvn jetty:run-exploded pagemvn jetty:run-war pageapache

       有時候,,你固然但願在例如在作集成測試時測試開始時自動運行你的項目,測試完成時中止。要作到這一點,你須要爲jetty 插件建立幾個<execution>腳本,並使用<daemon>true</daemon>配置選項來預防Jetty無限期運行,迫使它只在執行Maven時才運行。api

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

<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.pluginsgroupId來查找插件的,即便這個groupId跟上面要表達的內容徹底不一樣。爲了更明確的指向這個groupId是咱們須要的插件,惟一的辦法就是在settings.xml也作以下設置:框架

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

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

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

開始:maven

mvn jetty:start

關閉:ide

mvn jetty:stop

 

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

容器級配置

        Connectors  可選一組org.mortbay.jetty.Connector對象,包含jetty的端口監聽。若是你不指定任何一個NIOorg.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格式的實現。

  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.xmlwar文件。若是有任何變化,它都將從新打包並部署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/libWEB-INF/classesWEB-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內置的日誌記錄器。

 其實JettyJSP引擎已經包含了一個日誌依賴。若是你使用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

相關文章
相關標籤/搜索