Can't compile GWT project with GWTQuery in Eclipse - gwt

I'm trying to start using GWTQuery in a GWT project.
I've created sample GWT project in Eclipse
Added gwtquery-1.3.2.jar
into war/WEB-INF/lib
Edited Myproject.gwt.xml (added <inherits name='com.google.gwt.query.Query'/>)
When I compile the project it writes a lot of deffered errors but at the end it comes with:
Scanning for additional dependencies: jar:file:/C:/eclipseBacklog/Backlog/war/WEB-INF/lib/gwtquery-1.3.2.jar!/com/google/gwt/query/client/GQuery.java
Computing all possible rebind results for 'com.google.gwt.query.client.GQuery'
Rebinding com.google.gwt.query.client.GQuery
Checking rule <replace-with class='com.google.gwt.query.client.impl.SelectorEngineNativeIE8'/>
[ERROR] Errors in 'jar:file:/C:/eclipseBacklog/Backlog/war/WEB-INF/lib/gwtquery-1.3.2.jar!/com/google/gwt/query/client/Properties.java'
[ERROR] Line 20: The import com.google.gwt.core.shared cannot be resolved
[ERROR] Line 39: GWT cannot be resolved
[ERROR] Unable to find type 'com.google.gwt.query.client.GQuery'
[ERROR] Hint: Previous compiler errors may have made this type unavailable
[ERROR] Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly
[ERROR] Errors in 'jar:file:/C:/eclipseBacklog/Backlog/war/WEB-INF/lib/gwtquery-1.3.2.jar!/com/google/gwt/query/client/GQuery.java'
[ERROR] Line 1483: Failed to resolve 'com.google.gwt.query.client.GQuery' via deferred binding
What I'm doing wrong?

Check your version of gwt, you have to update to GWT-2.5.x. because this artifact of gquery has a undesired dependency of it. There are two GWT.java classes in 2.5, and gquery is depending of the new com.google.gwt.core.shared by mistake.
Open an issue at the gwtquery site becasuse this release should work with older gwt version as well.
You could also change the gquery version to 1.3.1 or 1.4.0-SNAPSHOT
Update: I've just deprecated version 1.3.2, and released 1.3.3 which compiles with previous gwt versions

Related

How to solve compilation error on inclusion of GWT Material Design

I want to use MaterialCarousel on my project and hence I think I set up my project accordingly. Here is what I am getting while I tried to compile.
Compiling module org.vadiraj.curiosity.GWTCuriosity
Ignored 240 units with compilation errors in first pass.
Compile with -strict or with -logLevel set to TRACE or DEBUG to see all errors.
Tracing compile failure path for type 'gwt.material.design.addins.client.carousel.MaterialCarousel'
[ERROR] Errors in 'gwt/material/design/addins/client/carousel/MaterialCarousel.java'
[ERROR] Line 135: Lambda expressions are allowed only at source level 1.8 or above
[ERROR] Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly
GWT 2.7 does not support Java 8, and so does not support any recent build of GWT Material Design. GWT 2.8.0 was released in 2016, and the latest version as of this answer is 2.8.2, and generally should be used instead of an earlier 2.8 build.

Eclipse Tycho: Compile error when using the java.xml.bind module?

I think the problem is the same as described in this blog post but I get this for Java 10: I have an Eclipse RCP application that uses Java 10 features but also JAXB classes. In Eclipse, I have to add the java.xml.bind module to the build path configuration of my project (as described here) to let the compile errors go away.
However, when building the product with Tycho 1.2.0 I get the following error, exactly for the class that uses JAXB:
[ERROR] Failed to execute goal org.eclipse.tycho:tycho-compiler-plugin:1.2.0:compile (default-compile) on project epd-editor: Compilation failure: Compilation failure:
[ERROR] ...app\src\app\editors\XmlPage.java:
[ERROR] package app.editors;
[ERROR] ^
[ERROR] Internal compiler error: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.lookup.BinaryModuleBinding.create(BinaryModuleBinding.java:64)
[ERROR] java.lang.NullPointerException
[ERROR] at org.eclipse.jdt.internal.compiler.lookup.BinaryModuleBinding.create(BinaryModuleBinding.java:64)
[ERROR] at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.getModuleFromAnswer(LookupEnvironment.java:427)
[ERROR] at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForTypeFromModules(LookupEnvironment.java:367)
[ERROR] at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:228)
[ERROR] at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:105)
Is there a way to configure the Tycho compiler plugin so that it can see modules like java.xml.bind or is there another reason for this error?
Thanks.
Java EE modules are deprecated for removal and not resolved by default and will be removed in Java 11.
The best way to handle this is to use a third-party dependency, but as you observe JDT trips over its own feet when that is done. I opened an issue and it was fixed some time ago, but it's not easy to find an artifact that contains the change and works on Java 10. The first artifact I know of comes from Eclipse Photon I20180531-0700.
Execute the following in Eclipse's plugins folder (#people from the future: you may have to update the version):
mvn install:install-file \
-Dfile=org.eclipse.jdt.core_3.14.0.v20180528-0519.jar \
-DgroupId=org.eclipse.tycho \
-DartifactId=org.eclipse.jdt.core \
-Dversion=3.14.0.v20180528-0519 \
-Dpackaging=jar
You can then use it as follows as dependencies for Maven's compiler plugin:
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-compiler-jdt</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
<!-- unreleased version that was pulled from Eclipse Photon I20180531-0700
contains the fix and compiles Java 10 -->
<version>3.14.0.v20180528-0519</version>
</dependency>
The problem is also described on java9.wtf with a demo project on GitHub. (I forgot to push, so it's only online for about five minutes now. 😒)
There are three ways you can include modules from the java.se.ee aggregator module, which is not included for compile or runtime in JDK 10. (As of JDK 11, these modules will be removed from the JDK).
The simplest is to use the command line option, --add-modules java.xml.bind. This will use the version that is still included in the JDK.
Find a JAXB implementation jar. Maven central is a good place to go for this, there is also a reference implementation for JSR 222 (JAXB), which is part of the Java Web Services Developer Pack (http://www.oracle.com/technetwork/java/webservicespack-jsp-140788.html) but this is waaaay old and may not be the best choice. You can add where you've downloaded the jar to the upgrade module path using --upgrade-module-path {path}
An alternative to 2 is to simply put the jar containing JAXB on the classpath.
I'm not familiar with Tycho but you would need to figure out how to use one of these methods with its configuration.

Using Guava 20.0 in a GWT 2.8 project for dummys

I am trying to use Guava 20.0 in a GWT 2.8 project, however I am getting errors when I try to compile;
...
[ERROR] Errors in 'com/google/common/base/Function.java'
[ERROR] Line 64: CanIgnoreReturnValue cannot be resolved to a type
[ERROR] Line 18: The import com.google.errorprone cannot be resolved
[ERROR] Errors in 'com/google/common/base/Supplier.java'
...
And the solutions I find online;
Including Guava GWT in GWT app
https://github.com/gwtproject/gwt/issues/9323
Are a little unclear to me.
Previously to get Guava working I added;
<inherits name="com.google.common.collect.Collect" />.
To gwt.xml of my project.
I am assuming this has changed and I need to add two more?
Or do I need to download separate *.jars as well?
(and is there gwt versions of those jars I need to use like there is for guava-gwt?)
I apologize if there's some documentation I am missing regarding these changes to using guava, but all I can find on the guava site is reference to needing to use GWT2.8, which I am already.
So any advice on the current (November 2016) method to use the new Guava in new GWT would be welcome.
Thanks,
Notes; I am using Eclipse only, no Maven or Gradle etc.
My project is also client side only, no server.
Update;
Heres how my classpaths are setup;
From Guava's pom.xml, you need jsr305 (version 1.3.9, from the parent POM), error_prone_annotations (2.0.12), and j2objc-annotations (1.1).
You can download all of them from https://search.maven.org
See also https://github.com/google/guava/issues/2622
Ok, following the advice here;
https://groups.google.com/forum/#!topic/google-web-toolkit/gPlwknBXlXs
It does work sort of if I create two identical gwt.xml files with contents;
<module>
<inherits name="com.google.gwt.core.Core" />
<source path=""/>
<source path="concurrent"/>
<super-source path="super" />
</module>
I then place these files in packages;
com.google.errorprone.annotations
com.google.j2objc.annotations.Annotations
And add;
<inherits name="com.google.errorprone.annotations.Annotations" />
<inherits name="com.google.j2objc.annotations.Annotations" />
To my main projects gwt.xml
This works to get the project to compile, so technically it answers the question.
However;
a) It seems rather a hackjob.
b) While no errors, there is now a huge number of warnings that still seems guava related.
For example;
Resolving com.google.common.collect.AbstractMapBasedMultiset
Found type 'com.google.common.collect.AbstractMapBasedMultiset'
Found type 'com.google.common.collect.AbstractMultiset'
Resolving method add
[WARN] Ignoring unresolvable annotation type com.google.errorprone.annotations.CanIgnoreReturnValue
Resolving method add
[WARN] Ignoring unresolvable annotation type com.google.errorprone.annotations.CanIgnoreReturnValue
Resolving method remove
[WARN] Ignoring unresolvable annotation type com.google.errorprone.annotations.CanIgnoreReturnValue
Resolving method remove
...
...(many pages of this and identical errors in other classes)
For this reason I don't consider this question really answered yet, more that this is just a current workaround.

"Cannot be resolved to a type" after upgrading to GWT 2.7. and trying to compile a multi-project module

I´ve been having trouble getting the Super-Dev-Mode to work with GWT 2.7. and GXT 3.1.x The classical Dev-Mode starts without trouble, but the Super-Dev-Mode and GWT-compile the project won`t work.
I am currently working with Eclipse 4.4.2 with Java 1.7_2 on Windows.
So let´s pretend we have 2 GWT/GXT projects (no Maven) with GWT 2.6 and GXT 3.1.x (Projects are backuped on a repository).
One is called A and the other project is called B. Project A has many packages and no entrypoint (to just work as a library/framework), just an abstract entrypoint every other project has to extend. The other one is called B and inherits from A, the entrypoint extends the entrypoint of A.
When starting the project under GWT 2.6 in classical Dev-Mode the project works fine. When upgrading to GWT 2.7. it will work fine with the classical Dev-Mode, an even in Super-Dev-Mode the Codeserver starts to run, but when compiling the module i get an error that some code seems not to live under a package 'client' so i migrated it into a own package and added the sourcepath to the A.gwt.xml.
After fixing this error and starting the Super-Dev-Mode again (and when trying to GWT-compile) I get errors like this:
Ignored 15 units with compilation errors in first pass.
Compile with -strict or with -logLevel set to TRACE or DEBUG to see all errors.
Finding entry point classes
Tracing compile failure path for type 'com.example.b.client.B'
[ERROR] Errors in 'file:/C:/Workspace/ProjectB/src/com/example/b/client/B.java'
[ERROR] com.example.a.client.A cannot be resolved to a type
[ERROR] Errors in 'file:/C:/Workspace/ProjectA/src/com/example/a/view/ExampleLayout.java'
[ERROR] com.example.a.view.ILayout cannot be resolved to a type
[ERROR] Errors in 'file:/C:/Workspace/ProjectA/src/com/example/a/client/service/ExampleServiceAsync.java'
[ERROR] com.example.a.model.Examplemodel cannot be resolved to a type
[ERROR] Errors in 'file:/C:/Workspace/ProjectA/src/com/example/a/model/OtherExampleModel.java'
[ERROR] com.example.a.hibernate.model.ComOtherExampleModel cannot be resolved to a type
[ERROR] Errors in 'file:/C:/Workspace/ProjectB/src/com/example/b/client/service/OtherExampleServiceAsync.java'
[ERROR] com.example.a.model.NewExampleModel cannot be resolved to a type
...
(and many more)
Project A is included in the buildpath of the project B, when creating a custom run configuration where the project is added to "user entries" and adding source folders to "user" entries wont work. For the custom run configuration i used something like the following arguments:
"-src src/ -src ${workspace_loc:ProjectA} com.example.b.B"
And even:
"-src src/ -src ${workspace_loc:ProjectA} com.example.b.B com.example.a.A"
I widely searched for solutions and even tried to set up the workspace again, checkout the projects from the repository again, organize imports and even adding every package to the buildpath of A.
I also tried to add this to the .gwt.xml files didn´t work:
<add-linker name="xsiframe"/>
How can I solve the "cannot be resolved to a type" error?
I would really appreciate every form of help to get this problem done! Thanks!
One possible problem could be your version of GXT. If you are using GXT 3.1.1 (which was the latest GPL-release), then you can not use GWT 2.7.0.
Take a look at the version table:
GXT versions
As you can see, Sencha GXT 3.1.1 does not support GWT 2.7.0. The first GXT release which will support GWT 2.7.0 is GXT 3.1.2.

GWT Compile error:

I created a service, async, impl for an rpc service. However, when I go to do the gwt compile (I'm using Eclispe Indigo with the gwt 2.4 plugin) I'm getting these errors:
Compile with -strict or with -logLevel set to TRACE or DEBUG to see all errors.
Scanning for additional dependencies: file:/C:/.../client/activity/CalculatorActivity.java
Computing all possible rebind results for '...Calculator.client.CalculatorService'
Rebinding com... CalculatorService
Checking rule
[ERROR] Errors in 'file:/...Calcuator/src/...Calculator/client/CalculatorService.java'
[ERROR] Line 17: No source code is available for type java.io.InputStream; did you forget to inherit a required module?
[ERROR] Unable to find type '...Calculator.client.CalculatorService'
[ERROR] Hint: Previous compiler errors may have made this type unavailable
[ERROR] Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly
[ERROR] Errors in 'file:/...Calculator/client/activity/CalculatorActivity.java'
[ERROR] Line 59: Failed to resolve '...CalculatorService' via deferred binding
[ERROR] Cannot proceed due to previous errors
I'm not sure what is causing this? I'm not getting any compile errors under Eclipse, but something isn't setup right for the RPC service apparently.
Any ideas as to what the problem is?
It seems, you use the InputStream class somewhere in your client side code. But in client side code you are restricted to the classes mentioned in the JRE Emulation Reference.