我有一个包含多个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),但它忽略了这一点并加载了它在类路径中找到的第一个项目。
我需要理解为什么它忽略了我通过上下文设置的路径。
我需要理解为什么它会自动从类路径加载东西而没有人问。