使用Maven将GWT源代码整合到战争中的最佳实践

使用Maven将GWT源代码整合到战争中的最佳实践,gwt,maven-2,package,structure,war,Gwt,Maven 2,Package,Structure,War,我目前正在将我们过于庞大的项目分解为几个连续的部分。其目的是每个分离都成为自己的Maven项目。将有一个父Maven项目,负责确保编译所有正确的部分并共享全局属性 考虑到这一点,我们的GWT代码将自包含在自己的项目中,并将使用GWTMaven插件进行编译。另一个项目将负责创建WAR文件,可能使用Cargo插件,因为我们可能需要合并web.xml文件 这里有一个问题,我如何将一个项目中编译的GWT源代码放入另一个项目将创建的WAR文件中 更复杂的是,更多的项目将提供功能扩展,这些扩展也将包含在他们

我目前正在将我们过于庞大的项目分解为几个连续的部分。其目的是每个分离都成为自己的Maven项目。将有一个父Maven项目,负责确保编译所有正确的部分并共享全局属性

考虑到这一点,我们的GWT代码将自包含在自己的项目中,并将使用GWTMaven插件进行编译。另一个项目将负责创建WAR文件,可能使用Cargo插件,因为我们可能需要合并web.xml文件

这里有一个问题,我如何将一个项目中编译的GWT源代码放入另一个项目将创建的WAR文件中

更复杂的是,更多的项目将提供功能扩展,这些扩展也将包含在他们自己的项目中,并且这些将编译GWT源代码,需要将其包含在WAR中

有人有过这样的经历吗?有在线资源或最佳实践的指南吗?我是否应该寻求不同的结构

谢谢。

我们有一个类似的布局(略多于20个Maven模块)。webapp本身由3个项目组成:共享、客户端和服务器

  • 共享模块是一个简单的JAR,包含我们的RequestFactory接口和其他在客户机和服务器之间共享的代码

  • 客户机模块具有packaging=jar,因此它在Eclipse中被视为一个Java项目,它在准备包阶段运行gwt maven插件,我们使用汇编插件将JS代码打包成ZIP。该模块依赖于无分类器和分类器=源的共享

  • 服务器模块是webapp,它使用客户机模块的ZIP作为war覆盖

  • 理想情况下,gwt maven插件将提供特定于gwt的新包装,以及在战争中输出它的特定目标,类似于;但以上几乎就是我个人所说的“完美的项目布局”


    编辑:我正在使用类似的布局处理Maven原型:

    谢谢你,Thomas,这听起来与我们的项目非常相似。在第一步中,我假设您不使用插件,只使用作为jar和源jar共享的包。第二步,你能详细说明一下汇编插件是什么吗?第三步,你使用maven war插件吗?在共享模块中没有什么特别的东西,你是对的。允许您将其他工件附加到模块。在服务器模块中,maven-war插件从客户机模块调用ZIP作为一个插件。注意,我们也可以在客户端模块中使用packaging=war,但是我们必须排除
    WEB-INF/classes
    ,并且我们没有
    src/main/webapp
    ,所以我们选择packaging=jar。非常好,您已经回答了我的许多问题。现在将其全部付诸实践……在客户机项目中,我将对共享jar的依赖性指定为compile,并将对共享源jar的依赖性指定为所提供的。如果我现在在共享项目中做了任何更改,那么客户端项目中的gwt插件不会接受此更改并重新编译gwt源代码。我必须首先清理客户端项目,然后它将重新编译gwt源代码。这也是您的经验吗?如果您使用
    mvn gwt:run
    ,情况很可能就是这样。在Eclipse中,使用GPE,只需显式地将共享项目的src/main/java和src/main/resources文件夹添加到DevMode的运行时类路径。