HTML5 Offline GWT APP

I'm trying to create a standalone gwt application using the HTML5 cache manifest and local storage, but for this I need to create a manifest file listing all the created GWT files, right? Can I do this during the compilation process or is it better to do this in a shell script?

+4
source share
3 answers

This should be done using Linker, so that your resources are automatically added to the manifest at compile time. I know that there is an HTML5 cache manifest manifest, as the GWT team mentioned it several times, but I don’t know where the source is.

The closest alternative (and probably a good starting point for writing the HTML5 linker) is the Gears offline linker . Offline views of Gears are very similar to HTML5, so it's probably a matter of changing multiple lines to make it work.

There is also an informative video about using GWT linkers so that your application uses HTML5 web workers .

+5
source

I just had to do it the next day at work. As in the previous answer, you just need to add the linker. Here is an example of one that creates a manifest file for a Safari user agent based on a template file.

// Specify the LinkerOrder as Post... this does not replace the regular GWT linker and runs after it. @LinkerOrder(LinkerOrder.Order.POST) public class GwtAppCacheLinker extends AbstractLinker { public String getDescription() { return "to create an HTML5 application cache manifest JSP template."; } public ArtifactSet link(TreeLogger logger, LinkerContext context, ArtifactSet artifacts) throws UnableToCompleteException { ArtifactSet newArtifacts = new ArtifactSet(artifacts); // search through each of the compilation results to find the one for Safari. Then // generate application cache for that file for (CompilationResult compilationResult : artifacts.find(CompilationResult.class)) { // Only emit the safari version for (SelectionProperty property : context.getProperties()) { if (property.getName().equals("user.agent")) { String value = property.tryGetValue(); // we only care about the Safari user agent in this case if (value != null && value.equals("safari")) { newArtifacts.add(createCache(logger, context, compilationResult)); break; } } } } return newArtifacts; } private SyntheticArtifact createCache(TreeLogger logger, LinkerContext context, CompilationResult result) throws UnableToCompleteException { try { logger.log(TreeLogger.Type.INFO, "Using the Safari user agent for the manifest file."); // load a template JSP file into a string. This contains all of the files that we want in our cache // manifest and a placeholder for the GWT javascript file, which will replace with the actual file next String manifest = IOUtils.toString(getClass().getResourceAsStream("cache.template.manifest")); // replace the placeholder with the real file name manifest = manifest.replace("$SAFARI_HTML_FILE_CHECKSUM$", result.getStrongName()); // return the Artifact named as the file we want to call it return emitString(logger, manifest, "cache.manifest."); } catch (IOException e) { logger.log(TreeLogger.ERROR, "Couldn't read cache manifest template.", e); throw new UnableToCompleteException(); } } } 
+2
source

Use the gwt2go library GWT application manifest generator to do just that. It was easy.:)

+1
source

Source: https://habr.com/ru/post/927925/


All Articles