2014-10-18 54 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