2015-05-28 4 views
1

У меня есть проект GWT со следующими зависимостямиGWT проекта (Maven): Dependency конфликт

<dependency> 
     <groupId>com.google.gwt.inject</groupId> 
     <artifactId>gin</artifactId> 
     <version>2.1.2</version> 
    </dependency> 

    <dependency> 
     <groupId>net.sourceforge.owlapi</groupId> 
     <artifactId>owlapi-distribution</artifactId> 
     <version>4.0.2</version> 
    </dependency> 
  • джин 2.1.2 зависит от Guice 3,0 в то время как owlapi 4.0.2 зависит от Guice 4.0 -beta.

  • gin используется на стороне клиента, в то время как owlapi используется на стороне сервера.

  • Компиляция не работает, когда я принудию гусь 4.0-бета для использования. Вызванный java.lang.ClassNotFoundException: com.google.inject.internal.util.$Maps

  • Компиляция успешно, когда я заставляю Guice 3,0, который будет использоваться, но терпит неудачу во время выполнения вызванного java.lang.ClassNotFoundException: com.google.inject.internal.guava.collect.$ImmutableList

  • понижая версию owlapi не вариант.

Какие варианты я должен выполнить? Можно ли каким-то образом использовать области зависимости, сохраняя при этом работоспособный GWT DevMode?

ответ

4

Разделить проект в отдельных модулях. Учитывая ограниченный (по дизайну) вариант определения зависимостей Maven, это действительно путь.

Используйте один модуль для клиентского кода, используя только клиентские зависимости (GIN с Guice 3) и один модуль для серверного кода, используя только серверные зависимости (OWLAPI с Guice 4); и ваш клиентский модуль скомпилирует ваш код в JS и упаковывает их как WAR, который вы можете использовать в качестве «наложения» в серверном модуле (или, возможно, использовать третий модуль, который зависит от клиента и сервера, если вы предпочитаете). Если вы используете общий код, используйте третий/четвертый общий модуль, от которого зависят как клиентские, так и серверные модули; общий модуль вызовет maven-source-pluginjar-no-fork, так что клиентский модуль может зависеть от общих источников.

Вы можете найти архетипы после этого подхода в https://github.com/tbroyer/gwt-maven-archetypes. Они используют мои Maven Plugin for GWT, но более ранние версии (вы должны были клонировать и mvn install проект, а затем из соответствующего коммита) полагались на плагин Maven Moaven для GWT (мой плагин был разработан с учетом многомодульных проектов и удалил много хаки, которые были необходимы ранее при использовании плагина Mojo).

+0

ли я все еще быть в состоянии использовать DevMode как-то, когда у меня есть свой клиентский модуль компиляции в JS? – hansi

+0

Прочитайте README для моих архетипов, все объяснено. TL; DR: да. –

1

Это сложный сценарий для моего опыта maven с областями для зависимостей.

Учитывая, что ошибка, которую вы получите упоминает гуавы, вы можете получить повезло вынудив последнее гуавы, которые будут использоваться - owlapi должны работать с 17 или 18.

Другим вариантом может быть, чтобы попытаться перекомпилировать джин с Guice 4 (и, возможно, внести изменения в исходное положение). Я понятия не имею, насколько это сложно. Вам также необходимо обеспечить, чтобы ваши снимки были выпущены вместе с вашим приложением и доступны другим пользователям вашей команды, которые могут нуждаться в них.

0

Для чего это стоит. Я провел несколько минут и «портировал» его на круги 4. К счастью, это было довольно легко. Я сделал это, иначе в базе кода не было никаких изменений.

https://github.com/chinshaw/google-gin

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