2011-05-23 96 views
1

我们正在将我们的构建系统移动到使用maven。我们的一个项目使用gwt(版本2.2.0)。它在Eclipse上编译为没有任何错误的JavaScript,但是我们在maven中遇到了一些问题。运行时, “MVN清洁套装gwt-maven-plugin javascript编译错误

[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-可视化-1.1.1.jar \ COM功能toJsArrayInteger \谷歌\ GWT \ ajaxloader \客户端\ 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> 
       <!-- 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> 

回答

1

的问题是,我使用的是旧版本的GWT地图,它使用ajaxloader的旧版本。由于gwt-maps依赖在gwt-visualizations之前,编译器忽略了gwt-visualizations中的ajaxloader类。

似乎ideal解决这个问题的方法是使用noredist工件,然后明确包含gwt-ajaxloader依赖。我们还必须从ajaxloader中排除gwt-dev依赖(gwt-maven-plugin requirements)。

<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>