Проблемы с компиляцией маршрутов после перехода на Play 2.1
После перехода на Play-2.1 я столкнулся с проблемой, что компилятор маршрутов перестал работать для моего файла маршрутов. С Play-2.0.4 все было в порядке, но теперь я получаю ошибку сборки и не могу найти обходного пути.
В моем проекте я использую шаблон торта, поэтому действия контроллера видны не через <package>.<controller class>.<action>
, но через <package>.<component registry>.<controller instance>.<action>
, Новый компилятор маршрутов воспроизведения использует все компоненты пути действия, кроме двух последних, для формирования имени пакета, который будет использоваться в управляемых источниках (насколько я могу получить код в https://github.com/playframework/Play20/blob/2.1.0/framework/src/routes-compiler/src/main/scala/play/router/RoutesCompiler.scala). В моем случае это приводит к ситуации, когда <package>.<component registry>
выбрано в качестве имени пакета, что приводит к ошибке во время сборки:
[error] server/target/scala-2.10/src_managed/main/com/grumpycats/mmmtg/componentsRegistry/routes.java:5: componentsRegistry is already defined as object componentsRegistry
[error] package com.grumpycats.mmmtg.componentsRegistry;
Я сделал пример проекта, чтобы продемонстрировать эту проблему: https://github.com/rmihael/play-2.1-routes-problem
Можно ли как-то обойти эту проблему без сброса шаблона торта для контроллеров? Жаль, что я не могу продолжить игру 2.1 из-за этой проблемы.
2 ответа
Из-за репутации я не могу создать комментарий.
Соглашение состоит в том, что классы и объекты начинаются с верхнего регистра. Это соглашение применяется и к сопоставлению с образцом. Глядя на строку, кажется, нет никакой разницы между объектом пакета и обычным объектом (appart from case). Я не уверен, как Play 2.1 справляется с вещами, поэтому это не ответ, а комментарий.
Вы можете попробовать новый @
синтаксис в роутере. Это позволяет вам создать экземпляр из Global
учебный класс. Вы бы все равно указали <package>.<controller class>.<action>
, но в Global
вы получаете его откуда-то еще (например, реестр компонентов).
Вы можете найти немного дополнительной информации здесь в разделе "Создание экземпляров классов управляемых контроллеров": http://www.playframework.com/documentation/2.1.0/Highlights
Этот демонстрационный проект показывает его использование: https://github.com/guillaumebort/play20-spring-demo