2014-10-18 55 views
1

我正在使用一個產生戰爭的開源項目。我想將其部署到Jetty服務器。我想創建一個帶有Main類的sbt項目,在其中啓動一個碼頭服務器,然後在其上部署戰爭。如何將戰爭文件部署到Jetty?

我面臨的問題是如何告訴碼頭部署戰爭。即使我把戰爭作爲一種依賴,我仍然不會在我的項目中進行戰爭。

有一兩件事我想在build.sbt,它複製了所有的依賴到managed_lib文件夾添加

retrieveManaged := true 

,但是這看起來醜陋。

我不能在移動戰項目SBT

任何好的方法可以做到這一點?

+0

在你用sbt自動化之前,你知道如何用Jetty做這件事,並且自己去戰鬥(沒有sbt)嗎? – 2014-10-18 15:40:54

回答

1

你需要採取的步驟基本如下:

  1. 創建SBT任務,讓您可以訪問war文件

  2. 溝通戰爭文件的位置到代碼

  3. 告訴碼頭文件的位置


注意,代碼是未經測試,但它應該給你的東西去

1.

val warFile = taskKey[File]("A reference to the war file") 

warFile := { 
    val filter = artifactFilter(name = "name of warfile") 
    val updateReport = update.value 
    updateReport.filter(filter).toSeq.headOption.map { 
    case (config, module, artifact, file) => file 
    }.getOrElse(sys.error("Could not find a warfile")) 
} 

2.

project/buildinfo.sbt添加addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.3.2")

buildInfoPackage := "your.package", 
buildInfoObject := "BuildInfo", 
buildInfoKeys := Seq[BuildInfoKey](
    warFile 
), 
sourceGenerators in Compile <+= buildInfo 

3.

val warFile = new File(BuildInfo.warFile) 
// pass to Jetty