我的项目有一个多模块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:run
模块上运行gwt
,我会收到错误
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
内。
答案 0 :(得分:3)
转到webapp模块,然后运行mvn gwt:run
。
您可以使用配置文件来加快编译时间:例如,一个配置文件只能为gecko和english + draftCompile编译gwt。
如果您仍然遇到问题,请查看maven GWT插件multi-module setup。
答案 1 :(得分:1)
由于我还在使用GWT开发模式和一个包含多个子模块/项目的Maven项目,我创建了一个示例并将其上传到GitHub。您可以在以下网址找到它:
https://github.com/steinsag/gwt-maven-example
上面的自述文件显示了如何通过Maven运行它。这个例子的特点是:
我希望这至少有一个工作实例可以帮助你开始。