新的 GWT maven 插件

New GWT maven plugin

我在尝试编译时遇到以下错误。 目标是 gwt:compile 我确实将 moduleName 设置为变量。 模块名称是 com.example.app.App

同样的命令行~/work/projects/gwt/app$ mvn gwt:compile "-DmoduleName=com.example.app.App"

Failed to execute goal net.ltgt.gwt.maven:gwt-maven-plugin:1.0-rc-6:compile (default-cli) on project mysandbox: The parameters 'moduleName' for goal net.ltgt.gwt.maven:gwt-maven-plugin:1.0-rc-6:compile are missing or invalid -> [Help 1]

另一方面 mvn package 有效。

这是我的 pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>app</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <prerequisites>
    <maven>${mavenVersion}</maven>
  </prerequisites>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <mavenVersion>3.0</mavenVersion>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt</artifactId>
        <version>2.8.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>net.ltgt.gwt.maven</groupId>
        <artifactId>gwt-maven-plugin</artifactId>
        <inherited>false</inherited>
        <configuration>
          <launcherDir>${project.build.directory}/gwt/launcherDir</launcherDir>
        </configuration>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <!-- Do not upgrade past 3.1 to avoid triggering https://issues.apache.org/jira/browse/MSOURCES-95 -->
          <version>3.1</version>
          <configuration>
            <source>1.8</source>
            <target>1.8</target>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.eclipse.jetty</groupId>
          <artifactId>jetty-maven-plugin</artifactId>
          <version>9.3.14.v20161028</version>
          <configuration>
            <skip>true</skip>
          </configuration>
        </plugin>
        <plugin>
          <groupId>net.ltgt.gwt.maven</groupId>
          <artifactId>gwt-maven-plugin</artifactId>
          <version>1.0-rc-6</version>
          <extensions>true</extensions>
          <configuration>
            <sourceLevel>1.8</sourceLevel>
            <failOnError>true</failOnError>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <version>3.0.1</version>
          <executions>
            <execution>
              <id>attach-sources</id>
              <phase>package</phase>
              <goals>
                <goal>jar-no-fork</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat6-maven-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  <modules>
    <module>app-client</module>
    <module>app-shared</module>
    <module>app-server</module>
  </modules>
</project>

所以,你有一个多模块 Maven 项目。调用 mvn gwt:compile 将尝试在 4 个模块(根模块和 3 个子模块)中的每一个上执行 "goal"。因为您的 moduleName 属性(用于配置 gwt:compile 目标的 moduleName 属性)可能仅存在于 app-client 子模块中,gwt:compile 应用于根模块或 app-shared 子模块时失败。

如果你想构建你的项目,运行 mvn package(如果你不想 运行 测试,通过 -DskipTests)。

从技术上讲,您也可以 运行 mvn gwt:compile,但直接在子模块内。为此,您首先必须 mvn install app-shared 子模块;否则 Maven 将无法解决依赖关系(因为您将不再执行完整的 "reactor build".
出于多种原因(参见 http://blog.lexspoon.org/2012/12/recursive-maven-considered-harmful.html and http://blog.ltgt.net/maven-is-broken-by-design/ 作为起点),我强烈反对这种做法(mvn install 是一种反模式;大多数时候你想要的实际上是 mvn verify);而且我也不鼓励在多模块构建中使用 package 之前的任何阶段(归结为只使用 mvn package,可能与 -DskipTestsmvn verify