2016-09-07 101 views
1

我正在使用jetty-server:9.2.11,並且我想在我的嵌入式jetty應用程序中使用webapps目錄進行war部署,就像我們在使用獨立碼頭服務器時一樣。我看了一些資料,發現「像碼頭XML」的程序化配置像下面如何設置jetty.home使用maven的嵌入式碼頭

// Path to as-built jetty-distribution directory 
    String jettyHomeBuild = "../../jetty-distribution/target/distribution"; 

    // Find jetty home and base directories 
    String homePath = System.getProperty("jetty.home", jettyHomeBuild); 
    File homeDir = new File(homePath); 
    if (!homeDir.exists()) 
    { 
     throw new FileNotFoundException(homeDir.getAbsolutePath()); 
    } 
    String basePath = System.getProperty("jetty.base", homeDir + "/demo-base"); 
    File baseDir = new File(basePath); 
    if(!baseDir.exists()) 
    { 
     throw new FileNotFoundException(baseDir.getAbsolutePath()); 
    } 

    // Configure jetty.home and jetty.base system properties 
    String jetty_home = homeDir.getAbsolutePath(); 
    String jetty_base = baseDir.getAbsolutePath(); 
    System.setProperty("jetty.home", jetty_home); 
    System.setProperty("jetty.base", jetty_base); 







    // === jetty-deploy.xml === 
    DeploymentManager deployer = new DeploymentManager(); 
    deployer.setContexts(contexts); 
    deployer.setContextAttribute(
      "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", 
      ".*/servlet-api-[^/]*\\.jar$"); 

    WebAppProvider webapp_provider = new WebAppProvider(); 
    webapp_provider.setMonitoredDirName(jetty_base + "/webapps"); 
    webapp_provider.setDefaultsDescriptor(jetty_home + "/etc/webdefault.xml"); 
    webapp_provider.setScanInterval(1); 
    webapp_provider.setExtractWars(true); 
    webapp_provider.setConfigurationManager(new PropertiesConfigurationManager()); 

    deployer.addAppProvider(webapp_provider); 
    server.addBean(deployer); 

但在這裏使用「碼頭分佈」,但我只有在我的lib目錄碼頭相關的jar文件被拷貝作爲Maven依賴。我有點困在這裏做我的配置有「jetty.home」爲我的嵌入式碼頭應用程序,因爲我沒有使用任何標準碼頭distribution.I只有單獨的罐子。

回答

1

jetty.home當使用時沒有什麼意義。

LikeJettyXml正如其名字所暗示的那樣,它是jetty發行版的etc/jetty-*.xml文件的java版本,這就是它的全部內容和聲明。

如果你想設置一個webapps目錄(又名DeploymentManagerWebAppProvider),那麼就這麼做。

爲了獲得一些成功,您需要了解Jetty的操作和功能方面的相當不錯,專注於DeploymentManagerWebAppContext

雖然LikeJettyXml顯示了一些功能,但它從碼頭分佈的角度向您展示了它,而不是嵌入碼頭。

例如:

  • 碼頭分佈有正在被setDefaultsDescriptor()呼叫引用的etc/webdefault.xml,但是這並不需要進行設置,爲DeploymentManager可以只使用存在相同的webdefault.xml在jar文件中。
  • jetty-distribution有一個jetty.base,可以在啓用deploy模塊時預建${jetty.base}/webapps目錄。該目錄,jetty.base的概念,模塊的概念和特性,甚至是名稱webapps都是任意的,並且不需要爲嵌入式碼頭而存在。在任何你想要的地方製作這個目錄,無論你的心在哪裏,都可以命名它。
  • scanIntervalextractWars,ConfigurationManager都是可選的。其實,這是強制性的唯一配置的是不需要對大多數嵌入式碼頭設置setMonitoredDirNamesetContexts
  • 設置ContainerIncludeJarPattern(見計算器對於該屬性做其他問題)
  • 設置系統屬性中也無意義嵌入式碼頭,沒有在嵌入式碼頭使用這些(只存在碼頭分佈,其start.jar和各種${jetty.home}/etc/*.xml文件的那些屬性)

希望這有助於性能,並請花一些有時間真正瞭解部署在Jetty中的工作方式(javadoc爲DeploymentManager)這是一份體面的工作)。

部署可能是一個很大的話題,所以試圖在一個單一的stackoverflow答案中覆蓋它是超出範圍。

你要明白:

  • 碼頭組件LifeCycle
  • DeploymentManager作用
  • 部署AppLifeCycle
  • AppProvider作用
  • WebAppContext
  • 釷E服務器/ WebAppContextConfiguration
  • 的WebAppContext的初始化生命週期
+0

thanx的答覆,現在我明白我現在使用DeploymentManager和WebAppContext和我的目的與一個位置部署我的戰爭文件。 – user3014595

0

與研究位I過濾什麼,我需要從碼頭-like.xml和下面是什麼我的目的是什麼,我們需要保持

DeploymentManager deployer = new DeploymentManager(); 
    deployer.setContexts(contexts); 
    deployer.setContextAttribute(
      "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", 
      ".*/servlet-api-[^/]*\\.jar$"); 

    WebAppProvider webapp_provider = new WebAppProvider(); 
    webapp_provider.setMonitoredDirName("webapps"); 
    webapp_provider.setScanInterval(1); 
    webapp_provider.setExtractWars(true); 
    webapp_provider.setConfigurationManager(new PropertiesConfigurationManager()); 

    deployer.addAppProvider(webapp_provider); 
    server.addBean(deployer); 

看到這裏不需要jetty_base或JETTY_HOME

webapp_provider.setMonitoredDirName( 「的webapps」);