我正在与Maven建立一个GWT项目。我已经为GWT编译添加了gwt-maven-plugin,如下所示:
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<version>2.5.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-dev</artifactId>
<version>2.5.0</version>
<scope>provided</scope>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>2.5.0</version>
<executions>
<execution>
<configuration>
<module>com.karthik.ui.MainWidgets</module>
</configuration>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
我已经在执行标记下包含了编译目标,期望在编译阶段执行GWT编译。但GWT编译只在包阶段或运行mvn package命令时执行。
即使为gwt-dev依赖设置了提供的范围,我也会收到如下所示的警告。
[WARNING] Don't declare gwt-dev as a project dependency. This may introduce complex dependency conflict
1)为什么在编译阶段没有执行GWT编译?
2)我应该为GWT(gwt-user,gwt-dev)依赖关系设置哪个范围来克服警告?
答案 0 :(得分:1)
[WARNING] Don't declare gwt-dev as a project dependency. This may introduce complex dependency conflict
这是建议,而非要求。添加gwt-dev有充分的理由:
如果您执行这些操作,请务必将gwt-dev标记为<scope>provided</scope>
。一般来说,gwt-user依赖关系也应该标记为提供。
如果你不做这些事情,你不需要包含gwt-dev作为项目依赖项,但如果你想混合gwt-maven-plugin和gwt版本,它可能对你的插件有所帮助。
为什么不包括gwt-dev?除了上面的情况之外,有时候你可能不需要引用那个jar中的类 - 你需要的只是gwt-user(或服务器上运行时的gwt-servlet)。 gwt-maven-plugin会自动将gwt-dev添加到你的类路径中,这样编译器就可以正常运行。
至于&#34;为什么在编译阶段没有执行GWT编译?&#34;:
您已经专门配置了gwt-maven-plugin来运行gwt:compile
,但是在运行它时忘了告诉它,所以它在默认时间运行 - 在此期间prepare-package
。相反,您需要在<phase>compile</phase>
代码中指定<execution>
。
但是,compile
阶段可能为时过早 - 如果它恰好在.java文件编译为.class字节码之前运行,则编译器将失败。从生命周期文档https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html中考虑另一个时间,例如process-classes
或更高版本:
process-classes
对编译后生成的文件进行后处理,例如对Java类进行字节码增强。