嵌入式Jetty在验收测试中加载错误的项目

时间:2015-09-28 15:20:20

标签: scala sbt lift embedded-jetty

我有一个包含多个sbt子模块的项目:

Project
|
+--- acceptance
+--- dmz
+--- back-end

dmz 后端都是Lift项目。 Dmz 具有完整的UI,后端包含Rest调用。 Acceptance 对项目进行验收测试(使用Selenium和ScalaTest)。

设置

运行测试时,套件所做的第一件事就是使用以下代码为项目启动2个嵌入式jetty服务器:

val dmzWarPath = "dmz/target/scala-2.11/classes/webapp"
val backendWarPath = "back-end/src/main/webapp"    

def startDmz() = startServer(10280, "/dmz", dmzWarPath)    
def startInternal() = startServer(10400, "/back-end", backendWarPath)

def startServer(port: Int, contextPath: String, warPath: String): Unit = {    
   val server = new Server(port)

   val context = new WebAppContext()
   context.setContextPath(contextPath)
   context.setServer(server)
   context.setWar(warPath)

   server.setHandler(context)
   server.setStopAtShutdown(true)

   server.start()
}

startDmz()
startInternal()

问题

嵌入式Jetty似乎正在加载它在类路径中找到的第一个项目,无论我设置什么上下文。如果我评论与加载 Dmz 相关的所有代码并在尝试加载后端时运行测试,则会加载 Dmz ,如果它首先出现在类路径中。

我可以通过修改测试启动器中的类路径来重现IntelliJ中的这个类路径排序问题,因此我非常有信心这就是问题。

是的,我已经运行干净,重新编译,甚至重新启动笔记本电脑。

有关如何解决此问题的任何想法?我怎样才能强迫Jetty忽略类路径并加载我提供的战争?

要澄清

据我所知,我将Jetty指向一个路径(后端/ src / main / webapp),但它忽略了这一点并加载了它在类路径中找到的第一个项目。

我需要理解为什么它忽略了我通过上下文设置的路径。

我需要理解为什么它会自动从类路径加载东西而没有人问。

0 个答案:

没有答案