The question is: how do I retrieve the port number that play is listening on, no matter how it was defined (configuration, command line argument, or not at all).
This answer Retrieving port number in-application using Play Framework must be for Play v1 because that code doesn't compile.
In Play 2 Java there is:
Integer port = Play.application().configuration().getInt("http.port");
That doesn't return the actual port number, at least not in all cases. If Play is run as:
run 80 -Dhttp.address=example.com
Then it returns null.
If Play is run as
run -Dhttp.port 80 -Dhttp.address=example.com
Then Play starts on the default port (9000).
As biesior pointed out it works by mentioning the port twice:
play -Dhttp.port=80 "run 80"
Which of course is not optimal since one is what Play actually uses, and the other is what it reports.
But it would answer my question for dev mode. However, as the documentation says, Play should never be run using run in prod. So what's the equivalent for the start command, and is there no better, safer way? (I'm interested in the Java version but others might like to know about Scala too.)