Hi all,

it looks like there's an issue in packaging the GWT SDK (and GWT maven 
artifacts): org.json is not bundled gwt-user. That makes it harder to use 
RequestFactory out-of-the-box, as DevMode will have NoClassDefFoundErrors 
when trying to *send* a request to the server. org.json is bundled into 
requestfactory-server.jar and gwt-servlet-deps.jar, which makes it usable 
out-of-the-box on the server-side; it's also bundle into 
requestfactory-client.jar so you can easily run VM client-side code too (in 
unit-tests, an Android app, etc.) To run RF code in DevMode, you'd have to 
add the org.json JAR (downloaded somewhere on the internet) or the 
requestfactory-client.jar (which duplicates a lot of classes from 
gwt-user.jar), or the gwt-servlet-deps.jar (which is supposedly related to 
server-side code only) to your classpath; this is not intuitive.

What's striking is that javax.validation is *not* bundled that way (except, 
as expected, in gwt-servlet-deps.jar), it's instead shipped as a separate 
JAR in the SDK; it's not even bundled into gwt-user.jar.

There's a real discrepancy between org.json and javax.validation wrt 
packaging in the SDK, and none of them is satisfactory.


   - requestfactory-* JARs contain org.json but not javax.validation
   - gwt-user contains none of them
   - gwt-servlet-deps is made of only org.json and javax.validation, so why 
   ship javax.validation in addition to it?

IMO, both dependencies should receive equal treatment: either ship as 
separate JARs in the SDK (json.jar and validation-api.jar), or be bundled 
where needed (if you ask me, only in gwt-user.jar –similar to what's done 
with javax.servlet– and gwt-servlet-deps.jar; possibly renamed to or 
duplicated as requestfactory-deps.jar, as they are dependencies for both 
requestfactory-client and requestfactory-server).

Now, we have similar issues with Maven artifacts: gwt-user.jar depends on 
javax.validation but not org.json, so the DevMode will fail (whether you 
launch it with "Run As… Web Application" in Eclipse or "mvn gwt:run") 
unless you add a dependency on org.json. org.json is not even 
referenced/documented as an optional dependency (but given that 
javax.validation is not marked as "optional", there's no reason org.json 
would be marked "optional").
We're currently facing this issue in gwt-maven-archetypes and I'm not sure 
what we should do: add a dependency on requestfactory-client (contains 
duplicate classes from gwt-user) or on org.json (weird as we don't directly 
use org.json classes, and org.json is not marked as an optional dependency 
of gwt-user). https://github.com/tbroyer/gwt-maven-archetypes/pull/16

I'll try to submit a patch to have it fixed in 2.5 but we must first settle 
on the appropriate way to do it (both for the GWT SDK and for Maven 
artifacts), and I'd also like your feedback on what would be the 
appropriate workaround while waiting for 2.5.

-- 
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to