2016-06-01 6 views
0

Мы находимся в процессе обновления приложения от Play 2.3 (.10) до Play 2.4 (. 6). В среде разработки активы обнаруживаются и развертываются, как ожидалось. Однако в развертывании это не так. Мы используем sbt-native-packager 1.1.1 и activator clean stage на этапе построения. Сгенерированные файлы работают, но активы не копируются в каталог /public в любом из сгенерированных JAR. Вместо этого, я нахожу их в некоторых каталогах,Активы не упакованы в «public /», но ниже «META-INF /.../» в Play 2.4

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-настройка?

UPDATE 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 работает неправильно здесь и (б) как правильно его эксплуатировать ...

ответ

0

Хорошо, мы, наконец, получили его , Глубоко утопает в нашей постоянно растущей build.sbt там был хороший сниппет:

// Name of the produced artifact 
artifactName := { (sv: ScalaVersion, module: ModuleID, artifact: Artifact) => 
    artifact.name + "-" + module.revision + "." + artifact.extension 
} 

Он пришел от одного из самых, самых первых этапах нашего перехода к SBT, как инструмент для сборки еще в 2013 году может быть даже, что это было из официального учебника Play или sbt тогда (Play 2.1, sbt 0.12 ...). Он дожил до сегодняшнего дня.И это вызвало ошибку <project>-<version>-assets.jar, содержащую активы ниже public/, <project>-<version>.jar. Позже real<project>-<version>.jar с активами ниже META-INF переработал файл JAR, содержащий активы. И вот как все пошло не так.

Исправление было отключено - или лучше: удалить - это artifactName определение от build.sbt. Теперь все в порядке, и мы, наконец, можем продолжить миграцию в Play 2.4.

 Смежные вопросы

  • Нет связанных вопросов^_^