Compilation issue on GWT 2.8.2 (modular maven project)

314 views
Skip to first unread message

Luca Morettoni

unread,
Nov 12, 2018, 12:51:03 PM11/12/18
to GWT Users
Hello, I’m using the Thomas Broyer fantastic plugin[1] for maven to split my project into multiple subproject (client, shared and server).
Until now I used GWT version 2.8.1, but today I started a new project and I’d like to use the latest version (2.8.2), and some of the POJOs I use in the shared module will be used also in the server module as a response for some REST call (with Jersey).
Usually I annotate my POJOs with the usual @XmlRootElement to use it also in the response payload of a REST call; but switching to 2.8.2 version of GWT I got the known error:

[INFO]       [ERROR] Errors in 'file:/Users/luca/tmp/gwt/test/test-shared/src/main/java/net/morettoni/GreetingResponse.java'
[INFO]          [ERROR] Line 22: XmlTransient cannot be resolved to a type
[INFO]          [ERROR] Line 4: The import javax.xml.bind cannot be resolved
[INFO]          [ERROR] Line 8: XmlRootElement cannot be resolved to a type
[INFO]          [ERROR] Line 3: The import javax.xml.bind cannot be resolved
[INFO]          [ERROR] Line 31: XmlTransient cannot be resolved to a type

and as I see in the messages in this mailing list the solution is to add this extra dependency:

<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>...</version>
  <classifier>sources</classifier>
  <scope>provided</scope>
</dependency>

but I continue to get the same error running the SDM code server (mvn gwt:codeserver -pl *-client -am), even if I added the above to the pom.xml of the shared module.

Any idea on how to fix this issue? I’m using JAVA version 1.8 to compile and run the attached example.
Thanks in advance for the help!
test.zip

Freddy Boucher

unread,
Nov 12, 2018, 5:14:24 PM11/12/18
to GWT Users
Juste remove

<scope>provided</scope>

to fix SDM.

Luca Morettoni

unread,
Nov 13, 2018, 2:43:13 AM11/13/18
to google-we...@googlegroups.com
no, I tried this solution but it does not fix the problem...

David Nouls

unread,
Nov 13, 2018, 4:19:45 AM11/13/18
to GWT Users
By just adding sources to jaxb it will not work.

You need to have these sources in a gwt source folder. so it javax.xml.bind package must be declared as a source folder in a gwt.xml files before the GWT compiler picks it up to cross compile.
I don't think that adding the package in you module.gwt.xml will work since there are probably some java files in there that are refering to non supported JRE classes. But you could try with excluding those classes.

Regards,
David

andreas...@gmail.com

unread,
Nov 13, 2018, 4:32:57 AM11/13/18
to GWT Users
provided dependencies are not transitive. you need to add the dependency to the client package as well.

Thomas Broyer

unread,
Nov 13, 2018, 4:58:43 AM11/13/18
to GWT Users
You're doing your dependencies backwards actually.

  • test-shared does depend on jaxb annotations, but not their sources. Actually, with Java 11, which no longer ships jaxb, it doesn't even compile.
  • test-server doesn't directly depend on jaxb annotations (AFAICT), and could have the dependency transitively from test-shared.
  • test-client needs the jaxb annotations as dependency (see https://github.com/gwtproject/gwt/issues/9612, it won't find the jaxb annotations from the JDK), and it actually doesn't even need their sources (but in case you'd need them, this is where you'd put the dependency)

So:
  • remove scope=provided and classifier=sources from test-shared
  • remove the jaxb dependency from test-server
  • possibly add the jaxb dependency with classifier=sources in test-client

On Monday, November 12, 2018 at 6:51:03 PM UTC+1, Luca Morettoni wrote:

Luca Morettoni

unread,
Nov 13, 2018, 5:20:59 AM11/13/18
to google-we...@googlegroups.com


On 13 Nov 2018, at 10:58, Thomas Broyer <t.br...@gmail.com> wrote:

  • remove scope=provided and classifier=sources from test-shared
  • remove the jaxb dependency from test-server
  • possibly add the jaxb dependency with classifier=sources in test-client


Thanks Thomas, it works (with this changes):

  • Added jaxb as dependency in the shared project as:

    <dependency>
      <groupId>javax.xml.bind</groupId>
      <artifactId>jaxb-api</artifactId>
      <version>2.3.0</version>
    </dependency>

  • Added jaxb as dependency in the client project as:

    <dependency>
      <groupId>javax.xml.bind</groupId>
      <artifactId>jaxb-api</artifactId>
      <version>2.3.0</version>
      <classifier>sources</classifier>
    </dependency>


  • I keep the dependency on the server side, but I will try to remove it with the real project to see if then passes all the tests!

Thanks for the help!!!
Reply all
Reply to author
Forward
0 new messages