Error when Upgrading Vaadin from 7.3.3 to 7.4.x

I am not exactly sure what I am doing wrong here. My goal is to update Vaadin from 7.3.3 to 7.4.7, but when I try I am getting strange errors while packaging the project.

I am using IntelliJ for this, so what I tried was simply going into the POM and changing the version number. I then do a clean, followed by a package, but I get the following errors when trying:

[INFO]
    Tracing compile failure path for type 'com.google.gwt.core.client.impl.UnloadSupportEnabled'
[INFO]
       [ERROR]
 Errors in 'jar:file:/C:/Users/dangoloborodko/.m2/repository/com/google/gwt/gwt-user/2.6.0/gwt-user-2.6.0.jar!/com/google/gwt/core/client/impl/UnloadSupportEnabled.java'
[INFO]
          [ERROR]
 Line 154: The method isModuleUnloaded() is undefined for the type Impl
[INFO]
          [ERROR]
 Line 108: The method isModuleUnloaded() is undefined for the type Impl
[INFO]
       [ERROR]
 Errors in 'jar:file:/C:/Users/dangoloborodko/.m2/repository/com/google/gwt/gwt-user/2.6.0/gwt-user-2.6.0.jar!/com/google/gwt/core/client/impl/UnloadSupport.java'
[INFO]
          [ERROR]
 Line 44: Referencing method 'com.google.gwt.core.client.impl.Impl.dispose(Lcom/google/gwt/core/client/impl/Disposable;)': unable to resolve method in class 'com.google.gwt.core.client.impl.Impl'
[INFO]
    Tracing compile failure path for type 'com.google.gwt.dom.client.DOMImplIE6'
[INFO]
       [ERROR]
 Errors in 'jar:file:/C:/Users/dangoloborodko/.m2/repository/com/google/gwt/gwt-user/2.6.0/gwt-user-2.6.0.jar!/com/google/gwt/dom/client/DOMImplIE6.java'
[INFO]
          [ERROR]
 Line 120: The method imgSetSrc(Element, String) is undefined for the type DOMImplTrident
[INFO]
          [ERROR]
 Line 100: The method imgGetSrc(Element) of type DOMImplIE6 must override or implement a supertype method
[INFO]
          [ERROR]
 Line 116: The method imgSetSrc(Element, String) of type DOMImplIE6 must override or implement a supertype method
[INFO]
          [ERROR]
 Line 104: The method imgGetSrc(Element) is undefined for the type DOMImplTrident
[INFO]
    Tracing compile failure path for type 'com.google.gwt.core.client.impl.UnloadSupport'
[INFO]
       [ERROR]
 Errors in 'jar:file:/C:/Users/dangoloborodko/.m2/repository/com/google/gwt/gwt-user/2.6.0/gwt-user-2.6.0.jar!/com/google/gwt/core/client/impl/UnloadSupport.java'
[INFO]
          [ERROR]
 Line 44: Referencing method 'com.google.gwt.core.client.impl.Impl.dispose(Lcom/google/gwt/core/client/impl/Disposable;)': unable to resolve method in class 'com.google.gwt.core.client.impl.Impl'
[INFO]
    [ERROR]
 Aborting compile due to errors in some input files

I have tried changing the version to 7.4.1 and 7.4.2, and they both give me the same problem. Staying 7.3.x doesn’t. I have tried deleting my .m2 directory and rebuilding, but this does nothing for me.

Also, I have tried using the POM XML from a sample program I downloaded for 7.4.7, but that didn’t work either.

For reference, here’s my POM. Does anyone have any thoughts as to what I am doing wrong?

<?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">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.ici</groupId>
    <artifactId>weekly</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>ICI Weekly</name>
    <parent>
        <artifactId>weblogic-base</artifactId>
        <groupId>org.ici</groupId>
        <version>1.0</version>
    </parent>
    <properties>
        <commons.email.version>1.3.1</commons.email.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <mybatis.version>3.2.2</mybatis.version>
        <mybatis.guice.version>3.3</mybatis.guice.version>
        <mybatis.ehcache.version>1.0.2</mybatis.ehcache.version>
        <vaadin.version>7.4.7</vaadin.version>
        <!--<vaadin.version>7.3.3</vaadin.version>-->
        <guice.version>3.0</guice.version>
        <jtds.version>1.2.4</jtds.version>
        <c3p0.version>0.9.1.2</c3p0.version>
        <slf4j.version>1.6.1</slf4j.version>
        <jodatime.version>2.1</jodatime.version>
        <jodaconvert.version>1.2</jodaconvert.version>
        <shiro.version>1.2.3</shiro.version>
        <vaadin.plugin.version>${vaadin.version}</vaadin.plugin.version>
        <!-- used by weblogic deployer for name of the web application -->
        <weblogic.deploy.name>weekly</weblogic.deploy.name>
    </properties>
    <repositories>
        <repository>
            <id>vaadin-addons</id>
            <url>http://maven.vaadin.com/vaadin-addons</url>
        </repository>
        <repository>
            <id>vaadin-snapshots</id>
            <url>http://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>Java.Net</id>
            <url>http://download.java.net/maven/2/</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>vaadin-snapshots</id>
            <url>http://oss.sonatype.org/content/repositories/vaadin-snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
    <dependencies>


        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-server</artifactId>
            <version>${vaadin.version}</version>
        </dependency>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-client-compiled</artifactId>
            <version>${vaadin.version}</version>
        </dependency>
        <!--
          Needed when using the widgetset optimizer (custom ConnectorBundleLoaderFactory).
          
          For widgetset compilation, vaadin-client-compiler is automatically added on the
          compilation classpath by vaadin-maven-plugin so normally there is no need for an
          explicit dependency.
        -->
        <!--
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-client-compiler</artifactId>
            <version>${vaadin.version}</version>
            <scope>provided</scope>
        </dependency>
        -->
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-client</artifactId>
            <version>${vaadin.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>${jodatime.version}</version>
        </dependency>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-push</artifactId>
            <version>${vaadin.version}</version>
        </dependency>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-themes</artifactId>
            <version>${vaadin.version}</version>
        </dependency>
        <dependency>
            <groupId>org.vaadin.addons</groupId>
            <artifactId>flexibleoptiongroup</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.vaadin.addons</groupId>
            <artifactId>csvalidation</artifactId>
            <version>0.5.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.gwt.eventbinder</groupId>
            <artifactId>eventbinder</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.joda</groupId>
            <artifactId>joda-convert</artifactId>
            <version>${jodaconvert.version}</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.jtds</groupId>
            <artifactId>jtds</artifactId>
            <version>${jtds.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>${guice.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.inject.extensions</groupId>
            <artifactId>guice-assistedinject</artifactId>
            <version>${guice.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.inject.extensions</groupId>
            <artifactId>guice-servlet</artifactId>
            <version>${guice.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>${commons.email.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-guice</artifactId>
            <version>${mybatis.guice.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.caches</groupId>
            <artifactId>mybatis-ehcache</artifactId>
            <version>${mybatis.ehcache.version}</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>${c3p0.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
             <groupId>org.vaadin.addon</groupId>
            <artifactId>confirmdialog</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.3</version>
        </dependency>
        <dependency>
            <groupId>net.java.dev</groupId>
            <artifactId>csvio</artifactId>
            <version>0.5</version>
        </dependency>
        <dependency>
            <groupId>net.sf.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>1.8</version>
        </dependency>
        <dependency>
            <groupId>net.sf.jxls</groupId>
            <artifactId>jxls-core</artifactId>
            <version>1.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.ici.auth</groupId>
            <artifactId>shiro</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <version>${shiro.version}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.4.2</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>13.0.1</version>
        </dependency>
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.5</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>com.oracle.weblogic</groupId>
                <artifactId>wls-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <!-- As we are doing "inplace" GWT compilation, ensure the widgetset -->
            <!-- directory is cleaned properly -->
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <filesets>
                        <fileset>
                            <directory>src/main/webapp/VAADIN/widgetsets</directory>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.vaadin</groupId>
                <artifactId>vaadin-maven-plugin</artifactId>
                <version>${vaadin.plugin.version}</version>
                <configuration>
                    <extraJvmArgs>-Xmx512M -Xss1024k</extraJvmArgs>
                    <!-- <runTarget>mobilemail</runTarget> -->
                    <!-- We are doing "inplace" but into subdir VAADIN/widgetsets. This 
                        way compatible with Vaadin eclipse plugin. -->
                    <webappDirectory>src/main/webapp/VAADIN/widgetsets
                    </webappDirectory>
                    <hostedWebapp>src/main/webapp/VAADIN/widgetsets
                    </hostedWebapp>
                    <!-- Most Vaadin apps don't need this stuff, guide that to target -->
                    <persistentunitcachedir>${project.build.directory}</persistentunitcachedir>
                    <deploy>${project.build.directory}/gwt-deploy</deploy>
                    <!-- Compile report is not typically needed either, saves hunreds of mb disk -->
                    <compileReport>false</compileReport>
                    <noServer>true</noServer>
                    <!-- Remove draftCompile when project is ready -->
                    <draftCompile>false</draftCompile>
                    
                    <style>OBF</style>
                    <strict>true</strict>
                    <runTarget>http://localhost:8080/</runTarget>
                </configuration>
                <executions>
                    <execution>
                        <configuration>
                            <!-- if you don't specify any modules, the plugin will find them -->
                            <!-- <modules> <module>com.vaadin.demo.mobilemail.gwt.ColorPickerWidgetSet</module> 
                                </modules> -->
                        </configuration>
                        <goals>
                            <goal>clean</goal>
                            <goal>resources</goal>
                            <goal>update-theme</goal>
                            <goal>update-widgetset</goal>
                            <goal>compile-theme</goal>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>7.6.16.v20140903</version>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>com.vaadin</groupId>
                                        <artifactId>
                                            vaadin-maven-plugin
                                        </artifactId>
                                        <versionRange>
                                            [7.3.3,)
                                        </versionRange>
                                        <goals>
                                            <goal>resources</goal>
                                            <goal>update-widgetset</goal>
                                            <goal>compile</goal>
                                            <goal>update-theme</goal>
                                            <goal>compile-theme</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore></ignore>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-eclipse-plugin</artifactId>
                    <configuration>
                        <wtpversion>2.0</wtpversion>
                        <additionalProjectnatures>
                            <projectnature>com.vaadin.integration.eclipse.widgetsetNature</projectnature>
                        </additionalProjectnatures>
                        <additionalBuildcommands>
                            <buildcommand>com.vaadin.integration.eclipse.widgetsetBuilder</buildcommand>
                            <buildcommand>com.vaadin.integration.eclipse.addonStylesBuilder</buildcommand>
                        </additionalBuildcommands>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

If you go as far as to re-use pom.xml from other (sample) programs, you could as well do

mvn archetype:generate -DarchetypeGroupId=com.vaadin -DarchetypeArtifactId=vaadin-archetype-application -DarchetypeVersion=7.4.7

Then at least you have a working simple project to work from. From the error output you are presenting and the Vaadin 7.4 release notes one can see you are at wrong version of GWT, probably calculated by Maven because of one or more of your dependencies.

I may have mis-stated my “reuse” claim a bit. I didn’t really reuse the pom, rather I tried pulling out the pieces I needed from the sample pom, inserting the code into mine.

But, that is all irrelevant … it now works. Strangely, I had also previously noticed that GWT was causing the error, but I just thought the correct version was somehow bundled in with Vaadin. After reading your response, I gave that some more thought and added a pom entry for the GWT version 2.7, and everything works great.

So, thanks for the response … I am now properly upgraded!

Vaadin sure comes with its dependencies and their versions - however, Maven uses a technique known as “dependency mediation” to resolve version conflicts. This does not always give you the results you would expect - that is, if you expect e.g. the latest version to win. Rather, the version closest to the dependency tree’s root will win and in case multiple versions of an artifact are on the same level of that tree, then the first-found dependency will win. So it is wise to inspect the dependency tree and pin down versions as needed.

Oh, that makes sense. I will try reworking my pom so that Vaadin holds more precedent.

Very much appreciated!

Seems to me that you have/had something in your pom.xml which depends on GWT 2.6. This will conflict with the GWT version which is built into Vaadin (~ 2.7 in Vaadin 7.4). It will likely work if you add a dependency to GWT 2.7 as that is compatible, but you will still have two GWT versions (vaadin & gwt) on your classpath. A better solution might be to exclude the transivitive GWT dependency which some other dependency likely pulls in.