Мы находимся в процессе обновления нашего приложения с Play 2.3 (.10) до Play 2.4 (.6). В среде разработки активы обнаруживаются и развертываются, как и ожидалось. Однако в развертывании их нет. Мы используем sbt-native-packager 1.1.1 и activator clean stage
на этапе сборки. Сгенерированные файлы работают, но активы не копируются в каталог /public
ни в одном из сгенерированных JAR-файлов. Вместо этого я нахожу их в некоторых каталогах с именем
META-INF/resources/webjars/<project>/
<branch>-<commit>-<builddate>/javascripts/jquery-2.1.1.min.js
в сгенерированном файле <projectname>-assets.jar
. С Play 2.3 этот JAR содержит файл сверху, как
public/javascripts/jquery-2.1.1.min.js
как и ожидалось.
В результате активы не найдены и выдается ошибка 404. Маршрут обычный
GET /assets/*file controllers.Assets.at(path="/public", file)
В шаблонах ресурс упоминается как
<script type="text/javascript" src="@routes.Assets.at("javascripts/jquery-2.1.1.min.js")"></script>
что приводит, как и ожидалось, к
<script type="text/javascript" src="/assets/javascripts/jquery-2.1.1.min.js"></script>
в сгенерированном HTML, доставленном в браузер. Насколько я вижу, все именно так, как описано в документации. В среде разработки все работает. Но после развертывания кусочки не складываются...
Что здесь происходит? Почему я получаю что-то с «webjars» в пути, когда мы вообще не используем webjars? Почему активы не находятся в «общественности»? Как я могу заставить это работать? Есть ли какой-то плагин или настройка sbt?
ОБНОВЛЕНИЕ 2016-06-02
Тем временем мы обнаружили, что активы генерируются в первую очередь правильно:
[info] Packaging /home/xy/workspace/<project>/target/<project>-<version>.jar ...
[debug] Input file mappings:
[debug] public/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js
[debug] /home/xy/workspace/<project>/public/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js
Однако позже в процессе stage
тот же файл создается снова — и теперь с неправильным расположением файлов:
[info] Packaging /home/xy/workspace/<project>/target/<project>-<version>.jar ...
[debug] Input file mappings:
[debug] META-INF/resources/webjars/<project>/<version>/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js
[debug] /home/xy/workspace/<project>/public/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js
Я уже тестировал ручное изменение файла JAR после завершения сборки sbt: если я перемещу этот каталог META-INF/resources/webjars/<project>/<version>
в простой public/
и переупакую JAR (вне sbt), все будет работать отлично. Итак, у меня готов "план Б", но мне бы очень хотелось понять, (а) почему sbt работает неправильно и (б) как заставить его работать правильно...