gwt-maven-plugin ошибка компиляции JavaScript - PullRequest
1 голос
/ 23 мая 2011

Мы переводим нашу систему сборки на использование maven. Один из наших проектов использует gwt (версия 2.2.0) . Он компилируется в javascript без каких-либо ошибок в Eclipse, но у нас возникают некоторые проблемы в maven.

Ниже приводится сообщение об ошибке при запуске « mvn clean package »

[INFO]
[INFO] --- gwt-maven-plugin:2.2.0:compile (default) @ Analytics ---
[INFO] auto discovered modules [com.ivstel.af.AF]
[INFO] Compiling module com.ivstel.af.AF
[INFO]    Validating newly compiled units
[INFO]       [ERROR] Errors in 'jar:file:/C:/Users/Croydon.IVSTEL1/.m2/repository/com/google/gwt/google-apis/gwt-visualization/1.1.1/gwt-visualization-1.1.1.jar
!/com/google/gwt/visualization/client/CommonOptions.java'
[INFO]          [ERROR] Line 61: The method toJsArrayString(String[]) is undefined for the type ArrayHelper
[INFO]       [ERROR] Errors in 'jar:file:/C:/Users/Croydon.IVSTEL1/.m2/repository/com/google/gwt/google-apis/gwt-visualization/1.1.1/gwt-visualization-1.1.1.jar
!/com/google/gwt/visualization/client/DataTable.java'
[INFO]          [ERROR] Line 140: The method toJsArrayInteger(int[]) is undefined for the type ArrayHelper
[INFO]       [ERROR] Errors in 'jar:file:/C:/Users/Croydon.IVSTEL1/.m2/repository/com/google/gwt/google-apis/gwt-visualization/1.1.1/gwt-visualization-1.1.1.jar
!/com/google/gwt/visualization/client/DataView.java'
[INFO]          [ERROR] Line 62: The method toJsArrayInteger(int[]) is undefined for the type ArrayHelper
[INFO]          [ERROR] Line 74: The method toJsArrayInteger(int[]) is undefined for the type ArrayHelper
[INFO]          [ERROR] Line 82: The method toJsArrayInteger(int[]) is undefined for the type ArrayHelper
[INFO]          [ERROR] Line 94: The method toJsArrayInteger(int[]) is undefined for the type ArrayHelper
[INFO]       [ERROR] Errors in 'jar:file:/C:/Users/Croydon.IVSTEL1/.m2/repository/com/google/gwt/google-apis/gwt-visualization/1.1.1/gwt-visualization-1.1.1.jar
!/com/google/gwt/visualization/client/VisualizationUtils.java'
[INFO]          [ERROR] Line 30: The method toJsArrayString(String[]) is undefined for the type ArrayHelper
[INFO]          [ERROR] Line 44: The method toJsArrayString(String[]) is undefined for the type ArrayHelper

Однако рассматриваемый jar содержит функцию toJsArrayInteger в gwt-visualization-1.1.1.jar \ com \ google \ gwt \ ajaxloader \ client \ ArrayHelper.java

<?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/maven-v4_0_0.xsd">

  <!-- POM file generated with GWT webAppCreator -->
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.ivstel.analytics</groupId>
  <artifactId>Analytics</artifactId>
  <packaging>war</packaging>
  <version>1</version>
  <name>Analytics</name>

  <properties>
    <!-- Convenience property to set the GWT version -->
    <gwtVersion>2.2.0</gwtVersion>

    <!-- GWT needs at least java 1.5 -->
    <maven.compiler.source>1.5</maven.compiler.source>
    <maven.compiler.target>1.5</maven.compiler.target>
    <webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>

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

    <!-- Shared version number properties -->
    <com.google.gwt.version>${gwtVersion}</com.google.gwt.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>com.google.gwt</groupId>
      <artifactId>gwt-servlet</artifactId>
      <version>${com.google.gwt.version}</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>com.google.gwt</groupId>
      <artifactId>gwt-user</artifactId>
      <version>${com.google.gwt.version}</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>com.google.gwt.google-apis</groupId>
      <artifactId>gwt-maps</artifactId>
      <version>1.0.4</version>
    </dependency>

    <dependency>
      <groupId>com.google.gwt.google-apis</groupId>
      <artifactId>gwt-visualization</artifactId>
      <version>1.1.1</version>
    </dependency>

    <dependency>
      <groupId>org.gwtmultipage</groupId>
      <artifactId>gwtmultipage-core</artifactId>
      <version>1.0.0.Beta5</version>
    </dependency>

    <!-- Other dependencies ....... -->

  </dependencies>

  <build>
    <!-- Generate compiled stuff in the folder used for developing mode -->
    <outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>

    <plugins>

      <!-- GWT Maven Plugin -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>gwt-maven-plugin</artifactId>
        <version>2.2.0</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
              <goal>test</goal>
              <goal>i18n</goal>
              <!-- /2510732/gwt-maven-eclipse-plugin-sboi-kompilyatsii-iz-za-dublirovaniya-klassa -->
              <!-- <goal>generateAsync</goal> -->
            </goals>
          </execution>
        </executions>
        <!-- Plugin configuration. There are many available options, see gwt-maven-plugin 
          documentation at codehaus.org -->
        <configuration>
          <runTarget>AF.html</runTarget>
          <hostedWebapp>${webappDirectory}</hostedWebapp>
          <i18nMessagesBundle>com.ivstel.af.client.Messages</i18nMessagesBundle>
        </configuration>
        <dependencies>
            <dependency>
              <groupId>com.google.gwt</groupId>
              <artifactId>gwt-servlet</artifactId>
              <version>${com.google.gwt.version}</version>
            </dependency>
            <dependency>
              <groupId>com.google.gwt</groupId>
              <artifactId>gwt-user</artifactId>
              <version>${com.google.gwt.version}</version>
            </dependency>
            <dependency>
              <groupId>com.google.gwt</groupId>
              <artifactId>gwt-dev</artifactId>
              <version>${com.google.gwt.version}</version>
            </dependency>
        </dependencies>
      </plugin>

      <!-- Copy static web files before executing gwt:run -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>exploded</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <webappDirectory>${webappDirectory}</webappDirectory>
        </configuration>
      </plugin>

    </plugins>
  </build>

  <profiles>
    <profile>
      <id>noTest</id>
       <properties>
         <maven.test.skip>true</maven.test.skip>
       </properties>
    </profile>
  </profiles>

</project>

1 Ответ

1 голос
/ 23 мая 2011

Проблема заключалась в том, что я использовал более старую версию gwt-maps, в которой использовалась более старая версия ajaxloader. Поскольку зависимость gwt-maps была до gwt-визуализаций, компилятор игнорировал классы ajaxloader в gwt-визуализациях.

Похоже, что идеальный способ решения этой ситуации - использовать артефакты noredist и затем явно включить зависимость gwt-ajaxloader. Мы также должны исключить зависимость gwt-dev от ajaxloader (требование gwt-maven-plugin).

    <dependency>
      <groupId>com.google.gwt.google-apis</groupId>
      <artifactId>gwt-ajaxloader</artifactId>
      <version>1.1.0</version>
      <exclusions>
        <exclusion>
          <groupId>com.google.gwt</groupId>
          <artifactId>gwt-dev</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>com.google.gwt.google-apis</groupId>
      <artifactId>gwt-maps</artifactId>
      <version>1.1.0</version>
      <classifier>noredist</classifier>
    </dependency>

    <dependency>
      <groupId>com.google.gwt.google-apis</groupId>
      <artifactId>gwt-visualization</artifactId>
      <version>1.1.1</version>
      <classifier>noredist</classifier>
    </dependency>
...