当我执行“run”命令时,如何更改Play使用的默认端口(9000)?

221

当在Play控制台上发出“run”命令时,我如何更改开发模式下Play框架使用的默认端口?

这适用于Play框架2.0 beta版本。

无论是在命令行中还是在application.conf文件中使用http.port配置参数似乎都没有效果:

C:\dev\prototype\activiti-preso>play run --http.port=8080
[info] Loading project definition from C:\dev\prototype\activiti-preso\project
[info] Set current project to activiti-preso (in build file:/C:/dev/prototype/activiti-preso/)


Windows, really? Ok, disabling colors.

--- (Running the application from SBT, auto-reloading is enabled) ---

[error] org.jboss.netty.channel.ChannelException: Failed to bind to: 0.0.0.0/0.0.0.0:9000
[error] Use 'last' for the full log.

3
@PereVillega 这很搞笑,因为它是真实的:https://github.com/playframework/playframework/blob/9206bea8c9c88acdc6786ebb2554f081396e8f6a/framework/src/play/src/main/scala/play/utils/Colors.scala#L14 - Gregory Kalabin
1
在看到“Windows,真的吗?”之后,我不得不请我的Windows同事检查它是否仍然存在。我们正在使用2.2.0版本,它不再显示该消息,但会禁用颜色。我怀疑这只是在测试版中出现的问题。 - Eric Wilson
在 build.sbt 中添加 PlayKeys.devSettings := Seq("play.server.http.port" -> "9001")。 - Rajat
https://www.playframework.com/documentation/2.5.x/ConfigFile#Using-with-the-run-command - Rajat
24个回答

423

Play 2.x

在 Play 2 中,这些功能是通过 sbt 插件实现的,因此以下说明只是 sbt 任务。您可以使用任何 sbt 运行器(例如 sbtplayactivator)。下面使用了 sbt 运行器,但您可以将其替换为您选择的 sbt 运行器。

Play 2.x - 开发模式

对于浏览器重新加载模式:

sbt "run 8080"

对于连续重新加载模式:

sbt "~run 8080"

Play 2.x - 调试模式

要在端口8080上通过http监听器运行调试模式,请执行以下操作:

sbt -jvm-debug 9999 "run 8080"

Play 2.x - 生产模式

以生产模式启动:

sbt "start -Dhttp.port=8080"

Play 2.x - 分阶段发布

创建分阶段发布:

sbt stage

对于 Play 2.0.x 和 2.1.x 版本,请使用 target/start 脚本(仅限 Unix):

target/start -Dhttp.port=8080

对于Play 2.2.x和2.3.x版本,请使用target/universal/stage/bin目录下的适当启动脚本:

target/universal/stage/bin/[appname] -Dhttp.port=8080
在Windows上使用Play 2.2.x和2.3.x:
target\universal\stage\bin\[appname].bat -Dhttp.port=8080

Play 2.x - Zip分发

创建zip分发:

sbt dist

对于 Play 2.0.x 和 2.1.x 版本,请在已提取的 zip 文件中使用 start 脚本(仅适用于 Unix):

start -Dhttp.port=8080

对于 Play 2.2.x 版本,请使用 [应用程序名称]-[版本号]/bin 目录中的适当脚本:

[appname]-[version]/bin/[appname] -Dhttp.port=8080

在 Windows 上使用 Play 2.2.x:

[appname]-[version]\bin\[appname].bat -Dhttp.port=8080

Play 1.x

conf/application.conf文件中更改http.port的值或通过命令行传递它:

play run --http.port=8080

1
我相信现在这只适用于1.x版本,还没有在2.0 beta中实现。 - Pere Villega
19
我正在运行Play 2.0。当我尝试运行 play run 8080 时,仍然在9000上运行。我使用的是Mac系统。这是怎么回事? 编辑: play "run 8080"可以解决问题! - Jay Q.
6
你不能在Play配置文件中指定端口,因为配置文件直到Play监听端口后才会被读取。你可以使用环境变量并将端口设置为该变量的值。 - James Ward
生成的 .bat 文件无法接收参数吗?我已经在 application.conf 中设置了 myattr=default,但是当我使用 bin\application.bat -Dmyattr=other 启动它时,它不起作用。在 Linux 上运行 bin/application -Dmyattr=other 没有问题。查看生成的 .bat 文件,我发现了这个: rem TODO - figure out how to pass arguments.... "%_JAVACMD%" %_JAVA_OPTS% %FREEMARKER_BUILDER_OPTS% -cp "%APP_CLASSPATH%" %APP_MAIN_CLASS% %CMDS% 我正在运行使用 Scala 2.10.2 构建的 Play 2.2.1(运行 Java 1.7.0_51)。 - Gastón Fournier
1
@James 我已经提交了以下问题并提供了解决方法:https://github.com/sbt/sbt-native-packager/issues/155。谢谢! - Gastón Fournier
显示剩余8条评论

33

Play 2.0-RC4

在运行play命令时,加上引号是很重要的。对于我的情况来说,如果没有引号,play命令仍然会在9000端口上运行。

play "run 8080"

或者您可以从播放控制台运行以下命令(输入“play”进入控制台)

run 8080

4
对于在Windows上运行的用户,第二个选项对我有效(适用于Play 2.0.4 final版本)。 - Baztoune

17

希望这可以帮助到某人。

通过sbt设置:

...
.settings(PlayKeys.playDefaultPort := 8855)
...

2
这是正确的答案!谢谢!(对于像我这样的其他SBT和Play新手,请在lazy val root =(project in file(“。”))之后将.settings行添加到您的build.sbt`文件中。有关SBT设置的更多详细信息,请参见此处:https://www.scala-sbt.org/1.0/docs/Custom-Settings.html) - Cameron Hudson
这是我在Play 2.7.x中找到的唯一有效的解决方案。 - Coert Grobbelaar

7

版本 2.0.3 :

  • 进入项目目录,只需输入play(后面不用加任何内容)。 这将打开播放控制台。

  • 接下来,输入run 8080。这将在端口8080上启动播放。

希望这可以帮助您。


5

只需在你的build.sbt文件中添加以下代码:

PlayKeys.devSettings := Seq("play.server.http.port" -> "8080")

这将设置一个开发服务器,端口号为8080。

5

For Play 2.3.x

activator "run -Dhttp.port=9001"


5

对于在Windows中使用可分发tar文件的Play 2.2.x版本,我在可分发根目录下创建了一个名为:{PROJECT_NAME}_config.txt的文件,并添加了以下内容:

-Dhttp.port=8080

将{PROJECT_NAME}替换为您的项目名称。然后像往常一样在bin\目录中启动{PROJECT_NAME}.bat脚本。


在Windows系统中(使用dist和zip选项),通过命令行参数传递参数无法正常工作(play 2.2.0)。但是,在配置文件中提供相同的参数却能够完美运行。 - skywalker

5

在Windows上安装Play 2.2.0

使用zip发行版(使用“dist”命令生成),我唯一能够更改启动端口的方法是先设置JAVA_OPTS,然后启动应用程序。

例如,从命令行:

set JAVA_OPTS=-Dhttp.port=9002
bin\myapp.bat

其中myapp.bat是由“dist”命令创建的批处理文件。

以下内容将始终忽略我的http.port参数,并尝试在默认端口9000上启动。

bin\myapp.bat -Dhttp.port=9002
然而,我注意到在 Linux/OSX 上这是有效的,可以在请求的端口上启动:
./bin/myapp -Dhttp.port=9002

4
您可以在项目目录下的.sbtopts文件中设置HTTP端口:
-Dhttp.port=9001

那么你就不需要每次记得将其添加到“run”任务中。

已在Play 2.1.1上进行测试。


3

适用于 Play 2.5.x 和 Play 2.6.x

sbt "-Dhttp.port=9002"
那么。
run

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,