无法在maven编译阶段执行gwt:compile

时间:2017-10-03 09:16:44

标签: java maven gwt

我正在与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)依赖关系设置哪个范围来克服警告?

1 个答案:

答案 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类进行字节码增强。