访问内部Grails模块

时间:2015-06-11 10:13:12

标签: grails intellij-idea

我的团队建议模块化我们当前的Grails项目,因此我们进行了实验。我们已经开始通过IntelliJ做了:

Projects > MyProject _right-click_ New > Module ..... create-app

然后我们将之前存在的每个domaincontrollerservicesview移动到其特定的module

当我们运行项目时(通过MyProject run-app -reloading),之前可访问的页面返回error 404。当然,我们认为这是因为项目目录是重组的。我们尝试从旧的url

访问这些网页
http://localhost:8080/MyProject/someController

到这个新url,假设它只需附加module名称

http://localhost:8080/MyProject/the-new-module-name/someController
                                ^ ^ ^ ^ ^ ^ ^ ^ ^ ^

但它仍然无效。我们如何设想运行项目及其模块,我们如何访问它们?我们是否需要配置一些.config.property个文件?

这是新项目目录的样子:

MyProject
    +.idea
    + grails-app
    + lib
    .
    .
    .
    - the-new-module
        +.idea
        + grails-app
        + lib
        .
        .
        .
        + web-app
        + wrapper
    .
    .
    .
    + web-app
    + wrapper

编辑:团队希望实施此“模块化”方法的原因是我们当前的Grails项目仍可以进一步细分为更小的独立项目(可维护性)等)。现在,我们已经设法创建(并运行)这些较小的项目。问题出现在巩固这些较小的部件上。所以任务是创建一个父Grails项目(甚至可能)。

1 个答案:

答案 0 :(得分:3)

看起来你假设InteliJ“模块”是Grails理解的东西。它没有。

制作模块化Grails应用程序的正确方法是“插件”。 Grails非常支持创建自己的插件。您甚至可以创建内联插件,从而大大加快开发速度。我强烈建议您阅读有关插件创建的official documentation,并在Grails应用程序中使用。

请记住,您的插件几乎可以包含与应用程序(服务,域类,控制器,GSP等)相同的所有工件,但会出现在同一应用程序中,就像使用插件的应用程序提供工件一样。

例如,如果插件中包含BookController,则它将具有相同的URL映射,就好像控制器是基本应用程序的一部分一样。您在问题中表明您希望为插件提供的这些控制器提供不同的URL。如果是这种情况,那么您需要命名控制器。您也可以在official documentation中详细了解相关内容。

<强>更新

为了帮助可视化插件如何与模块化Grails应用程序一起使用:

/~/MyApp 
/~/PluginA 
/~/PluginB

MyApp是主要应用程序(使用grails create-app创建)。它具有自己的功能,包括PluginAPluginB(均使用grails create-plugin创建)以将其功能添加到自身。您可以选择使用内联插件,甚至打包插件并将其发布到您自己的内部存储库以供其他应用程序使用(在本例中为MyApp)。请注意,这三个部分都是分开的。它们可以彼此独立地进行修改,在源代码管理中进行版本控制,管理,开发等等。