Проблемы с компиляцией маршрутов после перехода на 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

Другие вопросы по тегам