2015-07-03 128 views
1

我有问题,当我在开发人员模式的服务器上启动我的play framework服务器时,我无法指定服务器应侦听的HTTP端口。 当我尝试使用以下命令的HTTP地址总是被忽略:运行忽略参数-Dhttp.address = ****

./play "run -Dhttp.address=192.168.1.1 -Dhttp.port=8080" 

的端口设置正确,但不是因为它可以在这个输出中看到的地址:

enter image description here

当我以生产模式运行服务器start地址设置正确,一切正常。但是为了开发目的,我想重新加载并编译所有文件,只要它们被更改,所以我总是可以使用最新的代码。 我已经尝试了很多可能性,但迄今为止无法解决问题。希望有人能给我一些如何解决这个问题的提示。预先感谢您的支持。

回答

1

你不会喜欢这个答案。对于Play 2.2,这正是code(在GitHub上)。

start使用的端口和地址属性:

val server = new NettyServer(
    new StaticApplication(applicationPath), 
    Option(System.getProperty("http.port")).fold(Option(9000))(p => if (p == "disabled") Option.empty[Int] else Option(Integer.parseInt(p))), 
    Option(System.getProperty("https.port")).map(Integer.parseInt(_)), 
    Option(System.getProperty("http.address")).getOrElse("0.0.0.0") 
) 

run只使用端口属性:

def mainDevHttpMode(sbtLink: SBTLink, sbtDocHandler: SBTDocHandler, httpPort: Int): NettyServer = { 
    mainDev(sbtLink, sbtDocHandler, Some(httpPort), Option(System.getProperty("https.port")).map(Integer.parseInt(_))) 
    } 

    private def mainDev(sbtLink: SBTLink, sbtDocHandler: SBTDocHandler, httpPort: Option[Int], httpsPort: Option[Int]): NettyServer = { 
    play.utils.Threads.withContextClassLoader(this.getClass.getClassLoader) { 
     try { 
     val appProvider = new ReloadableApplication(sbtLink, sbtDocHandler) 
     new NettyServer(appProvider, httpPort, 
      httpsPort, 
      mode = Mode.Dev) 
     } catch { 
     case e: ExceptionInInitializerError => throw e.getCause 
     } 

    } 
    } 

但是,您可以一)自己叫NettyServerReloadableApplication和你想要的地址使用(虽然我从来没有尝试过);或b)使用非Play解决方案修改网络设置以使用默认地址的不同接口。