【发布时间】: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:声明模块model,logic,analyze,gwt,tests -
model:没有依赖关系 -
logic: 没有依赖关系 -
analyze:取决于model,logic -
gwt:取决于model,logic -
tests:依赖于model,logic,analyze,gwt(包含全局测试, 不是单元测试)
如果我在 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。
【问题讨论】: