【问题标题】:GWT hosted mode in multiproject maven setup多项目 Maven 设置中的 GWT 托管模式
【发布时间】:2012-11-07 22:17:56
【问题描述】:

我的项目有一个多模块 maven 设置,由 5 个模块组成,其中包括一个 GWT webapp。
它也是一个 Eclipse 多项目工作区,所以我创建了一个附加项目,仅包含一个 pom,它将其他项目(文件系统上的兄弟项目)列为子模块。
我也是一个新的maven用户,所以我可能做错了什么。 =)

gwt 模块使用以下插件

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>2.4.0</version>
<executions>
    <execution>
        <goals>
            <goal>generateAsync</goal>
            <goal>compile</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <hostedWebapp>war</hostedWebapp>
    <runTarget>GWT.html</runTarget>
</configuration>
</plugin>

当我在 pom 项目上运行 mvn package 时,我得到了预期的行为:项目以正确的顺序构建,并且战争很好。
但是,当我运行 mvn gwt:run 时,maven 会尝试在每个模块上查找 gwt 应用程序,但在第一个(父级)应用程序上失败,它甚至没有声明或管理 gwt 插件。
如果我运行mvn -fn gwt:run,则在其他项目上构建失败,最后在 gwt 模块上找到一个 gwt 应用程序并显示它。

  • 如何在托管模式下正确运行应用程序?这是正确的行为吗?

我不希望 GWT 模块成为父模块(如果可能的话),因为该项目有多个目标平台,生成 gwt Web 前端、Java 可执行 jar 后端以及未来还有一个 Android 应用程序,以及共享大部分代码(不仅是模型)。是否建议为这种设置使用单个 pom 结构,还是我在 maven 上失败了?

个人资料是我需要的吗?如果我这样做,我应该在每个模块上声明相同的配置文件 ID 吗?无论如何,我将如何防止他们触发gwt:run 命令?

  • 这样一个项目的设置应该是什么?这是正确的设置吗?

其他信息

模块是

  • pom:声明模块modellogicanalyzegwttests
  • model:没有依赖关系
  • logic: 没有依赖关系
  • analyze:取决于modellogic
  • gwt:取决于modellogic
  • tests:依赖于modellogicanalyzegwt(包含全局测试, 不是单元测试)

如果我在 gwt 模块上运行 gwt:run 我会收到错误

Could not resolve dependencies for project
djjeck.gwt:djjeck.gwt:war:0.0.1-SNAPSHOT:
Could not find artifact djjeck.model:djjeck.model:jar:0.0.1-SNAPSHOT

这是来自djjeck.gwt/pom.xml

<dependency>
    <groupId>djjeck.model</groupId>
    <artifactId>djjeck.model</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>

com.model-0.0.1-SNAPSHOT.jar 位于 war lib 文件夹中,包括打包和解包,以及 djjeck.model/target

【问题讨论】:

    标签: java gwt maven


    【解决方案1】:

    转到 webapp 模块,然后运行 ​​mvn gwt:run

    您可以使用配置文件来加快编译时间:例如,一个配置文件只能为 gecko 和英语 +draftCompile 编译 gwt。

    如果您仍有问题,请查看 maven GWT 插件 multi-module setup

    【讨论】:

    • 我收到了Could not resolve dependencies for project djjeck.gwt:djjeck.gwt:war:0.0.1-SNAPSHOT: Could not find artifact djjeck.model:djjeck.model:jar:0.0.1-SNAPSHOT。该 jar 位于该项目的目标文件夹和 war 的 lib 文件夹中。它在哪里找它?
    • 你必须从 webapp 模块中添加对域的依赖。
    • 我认为依赖已设置,这就是它寻找 jar 的原因。我正在更新 OP。
    • 模型、逻辑和gwt都定义了?首先在父级中执行 mvn 安装,然后尝试 gwt:run in gwt。
    • mvn install 修复了它!移动一些项目后可能会丢失一些东西=)非常感谢!
    【解决方案2】:

    由于我还在为 GWT 开发模式和具有多个子模块/项目的 Maven 项目而苦苦挣扎,因此我创建了一个示例并将其上传到 GitHub。您可以在以下位置找到它:

    https://github.com/steinsag/gwt-maven-example

    上述页面上的自述文件显示了如何通过 Maven 运行它。这个例子的特点是:

    • 多个模块
    • 不使用 GWT 的嵌入式 Jetty,而是使用自己的 Tomcat7 服务器
    • 可以通过文档化的 Maven 命令启动 Tomcat7 和 GWT 托管模式

    我希望这对至少有一个工作示例有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多