我们正在将构建系统移动到使用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 in question确实包含gwt-visualization-1.1.1.jar \ com \ google \ gwt \ ajaxloader \ client \ ArrayHelper.java中的函数toJsArrayInteger
<?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>
<!-- http://stackoverflow.com/questions/3611775/gwt-maven-eclipse-plugin-compilation-fails-due-to-duplicate-class -->
<!-- <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>
答案 0 :(得分:1)
问题在于我使用的是较旧版本的gwt-maps,它使用旧版本的ajaxloader。由于gwt-maps依赖在gwt-visualizations之前,编译器忽略了gwt-visualizations中的ajaxloader类。
似乎解决这个问题的ideal方法是使用noredist工件,然后显式包含gwt-ajaxloader依赖项。我们还必须从ajaxloader中排除gwt-dev依赖(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>