UPDATE: sbt native packager now comes with a number of built in solutions to this, see NieMaszNic's answer below.
This is a known issue, being tracked in the SBT native packager (which generates the start script) here:
https://github.com/sbt/sbt-native-packager/issues/72
My recommendation to work around this issue would be to write your own start batch script that uses a wildcard classpath matcher. You can put this script in the dist
directory in your Play project, and it will end up being packaged up with your application. That script might look like this:
java %1 -cp "./lib/*;" play.core.server.NettyServer .
Note that if you use a wildcard classpath matcher, you can no longer rely on classpath ordering to be the same as in dev mode. You shouldn't rely on classpath ordering anyway, but people inevitably do.