2013-12-24 7 views
0

У меня есть два приложения для воспроизведения 2.2.1, X и Y. Оба этих приложения имеют объект Global в пакете по умолчанию, который расширяет GlobalSettings и отменяет onStart. Приложение X публикуется в maven-репо, а приложение Y имеет X как зависимость. При попытке запустить приложение Y, я продолжаю получать странные исключения во время onStart. Эти исключения генерируются кодом в функции onStart приложения X. У меня не было никаких ошибок или предупреждений во время компиляции.Смешивание глобальных настроек приложения приложения

Ожидается ли это? Является ли это проблемой, связанной с игрой, или это произойдет с именами времени в конфликте пакета по умолчанию, как это? Как я могу запретить смешивать приложения GlobalSettings из приложений?

Я изначально включил общий код в свой собственный проект, чтобы оба приложения Play играли роль зависимости. Это было досадно поддерживать, и весь общий код действительно принадлежал к приложению X, поэтому я реорганизовался.

ответ

1

Ошибки, которые вы видите, будут связаны с тем фактом, что у вас есть несколько объектов Global в вашем загрузчике классов, а один из них не определен. Классный загрузчик похож на файловую систему, у вас может быть только один файл с заданным именем в данном каталоге. Если у вас есть две библиотеки в вашем пути к классам, которые определяют файл с тем же именем в том же каталоге, они не объединяются, а одно переопределяет другое, и какой из них используется, зависит от реализаций загрузчика классов - в Play мы специально не делаем определить порядок.

Объект Global должен быть только определяется конечными приложениями. Любой проект, который предназначен для использования в качестве зависимости, не должен определять объект Global. Он должен скорее определить поведение где-нибудь, которое может быть использовано объектом Global. Если он хочет прозрачно плагин поведение на старте, рассмотреть возможность реализации интерфейса Plugin вместо этого, как описано здесь:

http://developer.vz.net/2012/03/16/writing-a-play-2-0-module/

+0

Спасибо за объяснения, почему это происходит. Для меня имеет смысл, что нужно переопределить другого, но я удивляюсь, что это происходит тихо. В моей ситуации оба приложения на самом деле являются конечными приложениями, которые обмениваются данными друг с другом. Я хотел повторно использовать код модели между обоими приложениями (например, код сериализации/десериализации). – mushroom

+0

Ну, это звучит так, как будто это не терпит неудачу :) Но дубликаты на пути к классам терпят неудачу, потому что так работает Java-загрузчик классов Java, два JAR с одним и тем же файлом не будут вызывать ошибку. Если вы хотите повторно использовать код модели, вытащите этот код из третьего проекта, от которого зависят оба приложения. –

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