Migrating to ltgt gwt-maven-plugin causes compile problem with HibernateValidation

216 views
Skip to first unread message

Thomas

unread,
Aug 23, 2022, 10:42:59 PM8/23/22
to GWT Users
Hi all,

I'm in the progress of modularising a GWT app and migrating it to use the newer ltgt gwt-maven-plugin. I have a GWT module which compiles correctly using the old gwt-maven-plugin, but fails with the following errors using the new gwt-maven-plugin:

[INFO] --- gwt-maven-plugin:1.0.1:compile (default-compile) @ gwt-portal ---
[INFO] Compiling module com.inspectivity.portal.Portal
[INFO]    Tracing compile failure path for type 'com.inspectivity.portal.client.validation.CustomValidatorFactory'
[INFO]       [ERROR] Errors in 'file:/Users/thomas/dev-private/inspectivity-modules/gwt-portal/src/main/java/com/inspectivity/portal/client/validation/CustomValidatorFactory.java'
[INFO]          [ERROR] Line 31: The method getParameterNameProvider() of type CustomValidatorFactory must override or implement a supertype method
[INFO]          [ERROR] Line 36: The method close() of type CustomValidatorFactory must override or implement a supertype method
[INFO]    Tracing compile failure path for type 'org.hibernate.validator.engine.PathImpl'
[INFO]       [ERROR] Errors in 'jar:file:/Users/thomas/.m2/repository/com/google/gwt/gwt-user/2.8.2/gwt-user-2.8.2.jar!/org/hibernate/validator/super/org/hibernate/validator/engine/PathImpl.java'
[INFO]          [ERROR] Line 72: NodeImpl cannot be resolved to a type
[INFO]          [ERROR] Line 84: NodeImpl cannot be resolved to a type
[INFO]          [ERROR] Line 131: NodeImpl cannot be resolved to a type
[INFO]          [ERROR] Line 202: NodeImpl cannot be resolved to a type
[INFO]          [ERROR] Line 95: NodeImpl cannot be resolved to a type
[INFO]          [ERROR] Line 127: NodeImpl cannot be resolved to a type
[INFO]    Tracing compile failure path for type 'org.hibernate.validator.engine.ConstraintViolationImpl_CustomFieldSerializer'
[INFO]       [ERROR] Errors in 'jar:file:/Users/thomas/.m2/repository/com/google/gwt/gwt-user/2.8.2/gwt-user-2.8.2.jar!/org/hibernate/validator/engine/ConstraintViolationImpl_CustomFieldSerializer.java'
[INFO]          [ERROR] Line 100: The method instantiate(SerializationStreamReader) from the type ConstraintViolationImpl_CustomFieldSerializer refers to the missing type ConstraintViolationImpl
[INFO]          [ERROR] Line 37: ConstraintViolationImpl cannot be resolved to a type
[INFO]          [ERROR] Line 73: ConstraintViolationImpl cannot be resolved to a type
[INFO]          [ERROR] Line 32: The type ConstraintViolationImpl_CustomFieldSerializer must implement the inherited abstract method CustomFieldSerializer<ConstraintViolationImpl>.deserializeInstance(SerializationStreamReader, ConstraintViolationImpl)
[INFO]          [ERROR] Line 33: ConstraintViolationImpl cannot be resolved to a type
[INFO]          [ERROR] Line 32: The type ConstraintViolationImpl_CustomFieldSerializer must implement the inherited abstract method CustomFieldSerializer<ConstraintViolationImpl>.serializeInstance(SerializationStreamWriter, ConstraintViolationImpl)
[INFO]          [ERROR] Line 41: ConstraintViolationImpl cannot be resolved to a type
[INFO]          [ERROR] Line 105: ConstraintViolationImpl cannot be resolved to a type
[INFO]          [ERROR] Line 88: ConstraintViolationImpl cannot be resolved to a type
[INFO]          [ERROR] Line 53: ConstraintViolationImpl cannot be resolved to a type
[INFO]          [ERROR] Line 98: ConstraintViolationImpl cannot be resolved to a type
[INFO]    Tracing compile failure path for type 'org.hibernate.validator.engine.ValidationSupport'
[INFO]       [ERROR] Errors in 'jar:file:/Users/thomas/.m2/repository/com/google/gwt/gwt-user/2.8.2/gwt-user-2.8.2.jar!/org/hibernate/validator/engine/ValidationSupport.java'
[INFO]          [ERROR] Line 43: ConstraintViolationImpl cannot be resolved to a type
[INFO]       [ERROR] Errors in 'jar:file:/Users/thomas/.m2/repository/com/google/gwt/gwt-user/2.8.2/gwt-user-2.8.2.jar!/org/hibernate/validator/super/org/hibernate/validator/engine/PathImpl.java'
[INFO]          [ERROR] Line 72: NodeImpl cannot be resolved to a type
[INFO]          [ERROR] Line 84: NodeImpl cannot be resolved to a type
[INFO]          [ERROR] Line 131: NodeImpl cannot be resolved to a type
[INFO]          [ERROR] Line 202: NodeImpl cannot be resolved to a type
[INFO]          [ERROR] Line 95: NodeImpl cannot be resolved to a type
[INFO]          [ERROR] Line 127: NodeImpl cannot be resolved to a type
[INFO]    [ERROR] Aborting compile due to errors in some input files

I'm using GWT 2.8.2 and here's a fragment of my POM for the module:

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

    <parent>
        <groupId>com.inspectivity</groupId>
        <artifactId>inspectivity</artifactId>
        <version>...</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>gwt-portal</artifactId>
    <packaging>gwt-app</packaging>

    <name>gwt-portal</name>

    <properties>
        <app.version>${project.parent.version}</app.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <webappDirectory>${project.build.directory}/web-exploded</webappDirectory>
    </properties>

    <dependencies>
        ....
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-servlet</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-dev</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.5.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.5.Final</version>
            <classifier>sources</classifier>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
        </dependency>
        ...
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>net.ltgt.gwt.maven</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <configuration>
                    <moduleName>com.inspectivity.portal.Portal</moduleName>
                </configuration>
            </plugin>


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>



Thanks a lot for any hint!

Cheers,
Thomas

eliasb...@gmail.com

unread,
Aug 24, 2022, 3:24:53 AM8/24/22
to GWT Users
This looks like a classpath issue, from which I have suffered in the past but eventually managed to control.

I suggest using Maven dependency control to force the correct implementation of the offending classes, particularly if you are running with "GWT Eclipse Plugin" which doesn't respect inherited Maven dependency exclusions/overrides etc.

If you are using "GWT Eclipse Plugin", even though it is becoming outdated, there is still a way to control the classpath.
study https://github.com/eliasbalasis/eclipse-gwt-recipe for single-classpath for "Single CLASSPATH stream" traces.

I hope this helps you.

Thomas Broyer

unread,
Aug 24, 2022, 4:53:05 AM8/24/22
to GWT Users
GWT does not support javax.validation 1.1.0, only 1.0.0.
Because you're building a gwt-app, which only contains client-side code by definition, I see no reason for having javax.validation 1.1.0 (and Hibernate Validator 5, as well as gwt-servlet which is a subset of gwt-user). Stick to javax.validation 1.0.0.GA and Hibernate Validator 4.1.0.Final (https://www.gwtproject.org/doc/latest/DevGuideValidation.html#SetupInstructions)

Thomas

unread,
Aug 24, 2022, 4:55:18 AM8/24/22
to GWT Users
Thanks @eliasbalasis - that helped me. 
I was referencing the wrong versions of hibernate-validator and javax.validation. These need to be 4.1.0.Final and 1.0.0.GA respectively. 
I have no clue however how that was working with the old/mojo gwt-maven-plugin.

Thomas

unread,
Aug 24, 2022, 9:06:29 AM8/24/22
to GWT Users
Thanks Thomas. That's working now. 
Over the years I've updated the dependencies and interestingly the mojo gwt-maven-plugin worked fine with these dependencies. 

Thomas Broyer

unread,
Aug 24, 2022, 11:48:55 AM8/24/22
to GWT Users
Did you maybe have gwtSdkFirstInClasspath set to true? That would have put gwt-user and gwt-dev and all their dependencies into the classpath before your own dependencies, putting javax.validation 1.0.0.GA before javax.validation 1.1.0.Final and therefore shadowing it (I'd expect Hibernate Validator 5 to them break, but I have no idea how it's being used).

Thomas

unread,
Aug 25, 2022, 9:06:07 AM8/25/22
to GWT Users
No, didn't set gwtSdkFirstInClasspath and the default seems to be false. Anyways, the old mojo was working and the new version compiles now. Distracted by lots of BAU today and yet to actually test it.
Reply all
Reply to author
Forward
0 new messages