2013-04-22 3 views
2

Я пытаюсь создать 2 веб-сайта, которые используют одну и ту же функциональность ядра, используя play framework 2 (JAVA). задача заключается в том, как создать проект, чтобы основная часть могла быть разделена между двумя проектами. В игре 1 мы могли бы иметь общий модуль и объединять его в приложение, но я не мог найти способ сделать это, используя игру 2. Я понимаю, что я могу создать каталог модулей и поместить там основной код, но это не будет идеальное решение для меня, так как код в модуле должен использоваться совместно с несколькими проектами. кто-нибудь знает, как решить эту проблему?Как обмениваться модулями в игровой структуре 2

До сих пор я пытался обойти эту проблему, создав один проект с тремя модулями, один из которых - основной модуль, а другие - веб-сайты.

-mainProject 
     -modules 
      -core 
      -website1 
      -website2 

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

Обратите внимание, что ядро ​​должно иметь свои собственные маршруты и действия в контроллерах.

благодаря

ответ

1

Я не думаю, Игра поддержка мульти-модуль встроен прямо, но вы могли бы быть в состоянии взломать вместе решение, используя Maven сверху Play.

Что вы можете сделать, чтобы создать 3 разных игровых проекта, по одному для Core, Website1 и Website2. Поскольку вам нужно «экспортировать» основной проект, вы можете использовать Maven для этого.

В проекте Core вы создаете файл pom.xml (файл сборки Maven), который может package the Core project as a JAR. Затем вы запускаете mvn install:install для установки основного JAR в локальном репозитории, который затем можно использовать в других проектах вашего сайта. (Примечание стороны, есть Maven-Play bridge here, что вы могли бы оказаться полезными)

Теперь в ваших проектах Play WEBSITE1 и WEBSITE2, вы добавите к этому dependency JAR в файле Build.scala. Вы добавляете его к appDependencies

val appDependencies = Seq(
    "your-core-project-artifact-name" % "your-core-project-project-name" % "1.0.0.0", 
    "javax.mail" % "mail" % "1.4" // Existing libraries 
) 

Наконец, добавьте локальный репозиторий (где в настоящее время установлен основной проект) в качестве распознавателя в вашем WEBSITE1 и WEBSITE2 проекты

resolvers += (
    "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository" 
) 

Там у вас есть. Когда вы создаете проекты Website1/Website2, Play должен добавить зависимость к вашему основному проекту, и вы сможете использовать методы из своего основного проекта с ваших проектов на веб-сайте.

+0

Это концептуально способ, чтобы идти о вещах, если у вас есть полноценный проект Play, который вы хотите повторно использовать на других сайтах. Однако вам не нужно вводить Maven. Вы можете запустить задачу «publish-local» из «core», чтобы опубликовать ее в локальном репозитории Play. Затем вы можете просто перечислить его как зависимость в ваших проектах на сайте, как указано выше, без необходимости добавления другого репозитория. – avik

+0

В качестве последующего комментария я пробовал делать это в прошлом без успеха. Проблема, с которой я столкнулся, заключалась в загрузке файлов маршрутов. С помощью этой настройки у вас есть основное приложение для веб-сайта с файлом 'routes' и ядром JAR с другим файлом' routes'. Я обнаружил, что мои основные маршруты будут превзойти мои маршруты веб-сайта при запуске моего проекта веб-сайта и, таким образом, станут единственными маршрутами, доступными для моего сайта. В то время я работал в Play 2.0, и вполне возможно, что в Play 2.1 есть способ. – avik

+0

@avik, спасибо, в вашем предлагаемом решении, модуль будет полностью отдельным игровым модулем или он попадет под каталог модулей внутри проекта? – nightograph

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