我正在使用一个产生战争的开源项目。我想将它部署到Jetty服务器。我想创建一个带有Main类的sbt项目,它会触发一个jetty服务器,然后在war上面部署它。
我面临的问题是如何告诉码头部署战争。即使我把战争作为一种依赖,我仍然不会在我的项目中进行战争。
我试过的一件事就是添加
retrieveManaged := true
在build.sbt
中,它将所有依赖项复制到managed_lib
文件夹,但这看起来很难看。
我无法将战争项目移至SBT
有什么好方法吗?
答案 0 :(得分:1)
您需要采取的步骤基本如下:
创建一个sbt任务,可以访问war文件
将war文件的位置传达给您的代码
告诉Jetty文件的位置
请注意,代码未经测试,但它应该为您提供一些内容
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