【问题标题】:Unable to execute gwt:compile during maven compile phase在 maven 编译阶段无法执行 gwt:compile
【发布时间】:2018-03-14 10:44:58
【问题描述】:

我正在使用 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 依赖项设置了 provided 范围,我也会收到如下所示的警告。

[WARNING] Don't declare gwt-dev as a project dependency. This may introduce complex dependency conflict

1) 为什么在编译阶段不执行 GWT 编译?
2) 我应该为 GWT(gwt-user, gwt-dev) 依赖项设置什么范围以克服警告?

【问题讨论】:

    标签: java maven gwt


    【解决方案1】:
    [WARNING] Don't declare gwt-dev as a project dependency. This may introduce complex dependency conflict
    

    这是建议,而不是要求。不过,添加 gwt-dev 有充分的理由:

    • 如果你写了一个生成器
    • 如果你写了一个链接器

    如果您执行这些操作,请务必将 gwt-dev 标记为 &lt;scope&gt;provided&lt;/scope&gt;。一般来说,gwt-user 依赖项也应该标记为已提供。

    如果您不执行这些操作,则不需要将 gwt-dev 作为项目依赖项包含在内,但如果您希望混合使用 gwt-maven-plugin 和 gwt 版本,它作为插件的依赖项可能会有所帮助。

    为什么不包括 gwt-dev?除了上述情况之外,您可能不需要引用该 jar 中的类 - 您需要的一切都在 gwt-user(或服务器运行时的 gwt-servlet)中。 gwt-maven-plugin 会自动将 gwt-dev 添加到您的类路径中,以便编译器可以正确运行。


    关于“为什么在编译阶段不执行GWT编译?”:

    您已专门配置 gwt-maven-plugin 以运行 gwt:compile,但您忘记告诉它何时运行它,因此它在默认时间运行它 - 在 @987654325 期间@。相反,您需要在&lt;execution&gt; 标签中指定&lt;phase&gt;compile&lt;/phase&gt;

    但是,compile 阶段可能为时过早 - 如果它恰好在您的 .java 文件编译为 .class 字节码之前运行,编译器将会失败。考虑另一个时间,例如process-classes 或更高版本,来自生命周期文档https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

    process-classes 对编译生成的文件进行后处理,例如对 Java 类进行字节码增强。

    【讨论】:

    • 感谢您的回复。请您也回答我的第一个问题。
    • 对不起,我错过了!现在添加。
    • 感谢您的解释。
    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 2014-11-14
    • 2021-05-08
    • 2011-05-06
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    相关资源
    最近更新 更多