Witam.
Tworzę apllikację w PlayFramework. Tworzę ją na bazie kilku modułów:
/modules/common
/modules/shopping
/modules/admin
Główny moduł nie ma żadnego kodu.
Wszystko działa ok, do momentu kiedy chcę wywołać klasę pomiędzy modułami. np:
Z widoku /modules/common/app/views wywołuje klasę /modules/shopping/app/controllers/Index.java
<a href="@controllers.shopping.routes.Index.index">
Dostaje błąd:
object shopping is not a member of package controllers
W jaki sposób mogę w play wywoływać klasy z podmodułów?
mój główny build.sbt
import play.Project._
import sbt._
import Keys._
name := "svp"
playJavaSettings
version := "2.0.0_(20140725)"
libraryDependencies ++= Seq(
javaJdbc,
javaJpa,
"org.hibernate" % "hibernate-entitymanager" % "3.6.9.Final",
"mysql" % "mysql-connector-java" % "5.1.27",
"org.mindrot" % "jbcrypt" % "0.3m",
cache
)
lazy val common = project.in(file("modules/common"))
lazy val cirs = project.in(file("modules/cirs"))
lazy val shopping = project.in(file("modules/shopping"))
lazy val admin = project.in(file("modules/admin"))
val main = project.in(file("."))
.dependsOn(common).aggregate(common)
.dependsOn(cirs).aggregate(cirs)
.dependsOn(shopping).aggregate(shopping)
.dependsOn(admin).aggregate(admin)
Pozostałe pliki build dla poszczególnych modułów:
/modules/shopping/build.sbt:
name := "shopping"
playJavaSettings
Common.settings
libraryDependencies ++= Seq(
javaJdbc,
javaJpa,
"org.hibernate" % "hibernate-entitymanager" % "3.6.9.Final",
"mysql" % "mysql-connector-java" % "5.1.27",
"org.mindrot" % "jbcrypt" % "0.3m",
cache
)
/modules/common/build.sbt:
name := "common"
playJavaSettings
Common.settings
libraryDependencies ++= Seq(
javaJdbc,
javaJpa,
"org.hibernate" % "hibernate-entitymanager" % "3.6.9.Final",
"mysql" % "mysql-connector-java" % "5.1.27",
"org.mindrot" % "jbcrypt" % "0.3m",
cache
)
Podczas edycji widoku eclipse mi podpowiada pozostałe moduły (w załączniku print screen)
OPIS ZALEŻNOŚCI MIĘDZY MODUŁAMI
Moduł common: ma służyć jako zbiór elementów, klas, obiektów wspólnych dla pozostałych modułów/ aplikacji
Przykładowe klasy (MVC): użytkownicy, klienci, uprawnienia, role,
Pozostałe moduły mają być dedykowane konkretnej funkcji/aplikacji, np. Stworzę moduły (pod aplikacje) do:
- zarządzania treścią strony (CMS),
- przeprowadzania sprzedaży (Sklep),
- zarządzania relacjami z klientem (CRM)
- zarządzania wszystkimi aplikacjami (kontami użytkowników, rolami, uprawnieniami, etc.)
Wszystkie te pod moduły będą korzystały z modułu common.
Po zalogowaniu się użytkownik zobaczy stronę wyboru aplikacji/ modułu (zgodnie z uprawnienaimi).
Będą tam linki do tych aplikacji, np:
<a href="@controllers.shopping.routes.Index.index">Sklep</a>
<a href="@controllers.crm.routes.Index.index">CRM</a>
<a href="@controllers.cms.routes.Index.index">Zarządzanie stronami</a>
<a href="@controllers.admin.routes.Index.index">Panel administracyjny</a>
Aby je utworzyć moduł common musi mieć dostęp (dependsOn()) do pozostałych modułów, ponieważ kontrolery odwrotnego routingu są w konkretnych modułach!!!
Jeżeli użytkownik znajdzie się już w wybranym module/aplikacji zobaczy np: panel ze swoimi danymi (imię, nazwisko, grupa, rola, etc), które będą pobierana z modułu common z klas typu: User.java, Role.java etc.
- pf.png (211 KB) - ściągnięć: 160