С GWTP/Gin, возможно ли при необходимости установить модуль во время компиляции? У нас есть случай, когда мы хотели бы, чтобы презентатор и просмотр были доступны только в приложении при работе в режиме «разработки», где этот режим определяется флагом в файле .gwt.xml (устанавливается сборкой).Дополнительная установка модуля
Раньше мы бегали GXT с архитектурой MVC и сделать следующее в нашем модуле:
<replace-with class="com.mypackage.DevEditController" >
<all>
<when-property-is name="isDevelopment" value="true" />
<when-type-is class="com.mypackage.EditController" />
</all>
</replace-with>
<replace-with class="com.mypackage.StubEditController" >
<all>
<when-property-is name="isDevelopment" value="false" />
<when-type-is class="com.mypackage.EditController" />
</all>
</replace-with>
И создадим контроллер со следующим:
(EditController)GWT.create(EditController.class);
Я хотел бы сделать что-то подобное с GWTP, где компиляция приложения, отличная от разработки, ничего не знает об этом ведущем. По существу, делать что-то вдоль линий этого в нашем файле модуля:
<set-configuration-property name="gin.ginjector.modules"
value="com.mypackage.gin.SharedModule"/>
if this is development mode:
<set-configuration-property name="gin.ginjector.module.desktop"
value="com.mypackage.gin.DevDesktopModule"/>
else:
<set-configuration-property name="gin.ginjector.module.desktop"
value="com.mypackage.gin.DesktopModule"/>
Где DesktopModule и DevModule будет делать то же самое, но DevDesktopModule бы загрузить дополнительный модуль (TestModule), содержащий ведущий/вида связывания.
Возможно ли это с точки зрения конфигурации? Я думал, что могу сделать это с двумя файлами .gwt.xml, отключенными процессом сборки, но процесс сборки всегда видит файл TestModule, независимо от того, установлен он или нет (видимо, из-за Inject). Это сообщение об ошибке, мы получаем, когда модуль присутствует в исходном дереве, но никогда не установлено (это от сборки, где мы не хотим установить его)
[ERROR] Error injecting com.blah.test.TestPresenter$MyView: Unable to create or inherit binding: No @Inject or default constructor found for com.blah.test.TestPresenter$MyView
Path to required node:
com.google.gwt.inject.client.AsyncProvider<com.blah.test.TestPresenter> [com.gwtplatform.mvp.client.ClientGinjector#getcomblahtestTestPresenter()]
-> com.blah.test.TestPresenter [Implicit injection of com.google.gwt.inject.client.AsyncProvider<com.blah.test.TestPresenter>]
-> com.blah.test.TestPresenter$MyView [@Inject constructor of com.blah.test.TestPresenter]
[ERROR] Errors in 'gen/com/gwtplatform/mvp/client/DesktopGinjectorProvider.java'
[ERROR] Line 8: Failed to resolve 'com.gwtplatform.mvp.client.DesktopGinjector' via deferred binding
[WARN] For the following type(s), generated source was never committed (did you forget to call commit()?)
[WARN] com.gwtplatform.mvp.client.com_gwtplatform_mvp_client_DesktopGinjectorImpl
Я ценю любое представление о проблеме, или альтернативные решения для наличия модуля с условным включением в нашем приложении.