These build rules are used for building GWT
applications with Bazel. Applications are compiled as .war
files containing
compiled JavaScript and other resources. GWT applications can also be run in
Development Mode
via bazel run
.
To be able to use the GWT rules, you must provide bindings for the GWT jars and
everything it depends on. The easiest way to do so is to add the following to
your WORKSPACE
file, which will give you default versions for GWT and each
dependency:
http_archive(
name = "io_bazel_rules_gwt",
url = "https://github.com/bazelbuild/rules_gwt/archive/0.1.2.tar.gz",
sha256 = "070493202eebcf4a43c2a9acdf365d404b494950b0bce3f6ce144d8af784e868",
strip_prefix = "rules_gwt-0.1.2",
)
load("@io_bazel_rules_gwt//gwt:gwt.bzl", "gwt_repositories")
gwt_repositories()
If you want to use a different version of GWT or any of its dependencies, you
must provide your own bindings. Remove the gwt_repositories()
line above and
add a bind
rule for each of the following in your WORKSPACE
:
//external:gwt-dev
(defaults tocom.google.gwt:gwt-dev:2.8.0
)//external:gwt-user
(defaults tocom.google.gwt:gwt-user:2.8.0
)//external:gwt_ant
(defaults toorg.apache.ant:ant:1.9.7
)//external:gwt_asm
(defaults toorg.ow2.asm:asm:5.0.3
)//external:gwt_colt
(defaults tocolt:colt:1.2.0
)//external:gwt_commons-io
(defaults tocommons-io:commons-io:2.4
)//external:gwt_gson
(defaults tocom.google.code.gson:gson:2.6.2
)//external:gwt_javax-servlet
(defaults tojavax.servlet:javax.servlet-api:3.1.0
)//external:gwt_javax-validation
(defaults tojavax.validation:validation-api:1.0.0.GA
)//external:gwt_java-validation-src
(defaults tojavax.validation:validation-api:sources:1.0.0.GA
)//external:gwt_jetty-annotations
(defaults toorg.eclipse.jetty:jetty-annotations:9.2.14.v20151106
)//external:gwt_jetty-http
(defaults toorg.eclipse.jetty:jetty-http:9.2.14.v20151106
)//external:gwt_jetty-io
(defaults toorg.eclipse.jetty:jetty-io:9.2.14.v20151106
)//external:gwt_jetty-jndi
(defaults toorg.eclipse.jetty:jetty-jndi:9.2.14.v20151106
)//external:gwt_jetty-plus
(defaults toorg.eclipse.jetty:jetty-plus:9.2.14.v20151106
)//external:gwt_jetty-security
(defaults toorg.eclipse.jetty:jetty-security:9.2.14.v20151106
)//external:gwt_jetty-server
(defaults toorg.eclipse.jetty:jetty-server:9.2.14.v20151106
)//external:gwt_jetty-servlet
(defaults toorg.eclipse.jetty:jetty-servlet:9.2.14.v20151106
)//external:gwt_jetty-servlets
(defaults toorg.eclipse.jetty:jetty-servlets:9.2.14.v20151106
)//external:gwt_jetty-util
(defaults toorg.eclipse.jetty:jetty-util:9.2.14.v20151106
)//external:gwt_jetty-webapp
(defaults toorg.eclipse.jetty:jetty-io:9.2.14.v20151106
)//external:gwt_jetty-xml
(defaults toorg.eclipse.jetty:jetty-io:9.2.14.v20151106
)//external:gwt_jsinterop
(defaults tocom.google.jsinterop:jsinterop-annotations:1.0.0
)//external:gwt_jsinterop-src
(defaults tocom.google.jsinterop:jsinterop-annotations:sources:1.0.0
)//external:gwt_jsr-250-api
(defaults tojavax.annotation:jsr250-api:1.0
)//external:gwt_sac
(defaults toorg.w3c.css:sac:1.3
)//external:gwt_tapestry
(defaults totapestry:tapestry:4.0.2
)
Suppose you have the following directory structure for a simple GWT application:
[workspace]/
WORKSPACE
src/main/java/
app/
BUILD
MyApp.java
MyApp.gwt.xml
lib/
BUILD
MyLib.java
public/
index.html
Here, MyApp.java
defines the entry point to a GWT application specified by
MyApp.gwt.xml
which depends on another Java library MyLib.java
. index.html
defines the HTML page that links in the GWT application. To build this app, your
src/main/java/app/BUILD
can look like this:
load("@io_bazel_rules_gwt//gwt:gwt.bzl", "gwt_application")
gwt_application(
name = "MyApp",
srcs = glob(["*.java"]),
resources = glob(["*.gwt.xml"]),
modules = ["app.MyApp"],
pubs = glob(["public/*"]),
deps = [
"//src/main/java/lib",
],
)
Now, you can build the GWT application by running
bazel build src/main/java/app:MyApp
. This will run the GWT compiler and place
all of its output as well as index.html
into
bazel-bin/src/main/java/app/MyApp.war
. You can also run
bazel run src/main/java/app:MyApp-dev
to run GWT development mode for the
application. Once development mode has started, you can see the app by opening
http://127.0.0.1:8888/index.html in a browser. Note that development mode assumes
that all of your .java
files are located under java/
or src/main/java/
- see
details on the java_roots
flag below if this is not the case.
For a complete example, see the
example/
directory in this repository.
gwt_application(name, srcs, resources, modules, pubs, deps, output_root, java_roots, compiler_flags, compiler_jvm_flags, dev_flags, dev_jvm_flags):
<name>.war
: archive containing GWT compiler output and any files passed in via pubs.<name>-dev
: script that can be run viabazel run
to launch the app in development mode.
Attributes | |
---|---|
name |
Name, required
A unique name for this rule. |
srcs |
List of labels, optional
List of .java source files that will be compiled and passed on the classpath to the GWT compiler. |
resources |
List of labels, optional
List of resource files that will be passed on the classpath to the GWT
compiler, e.g. |
modules |
List of strings, required
List of fully-qualified names of modules that will be passed to the GWT
compiler. Usually contains a single module name corresponding to the
application's |
pubs |
List of labels, optional
Files that will be copied directly to the output war, such as static HTML or image resources. Not interpreted by the GWT compiler. |
deps |
List of labels, optional
List of other java_libraries on which the application depends. Both the
class jars and the source jars corresponding to each library as well as
their transitive dependencies will be passed to the GWT compiler's
classpath. These libraries may contain other |
output_root |
String, optional
Directory in the output war in which all outputs will be placed. By default outputs are placed at the root of the war file. |
java_roots |
List of strings, optional
Directories relative to the workspace root that form roots of the
Java package hierarchy (e.g. they contain |
compiler_flags |
List of strings, optional
Additional flags that will be passed to the GWT compiler. See here for a list of available flags. |
compiler_jvm_flags |
List of strings, optional
Additional JVM flags that will be passed to the GWT compiler, such as
|
dev_flags |
List of strings, optional
Additional flags that will be passed to development mode. See here for a list of available flags. |
dev_jvm_flags |
List of strings, optional
Additional JVM flags that will be passed to development mode, such as
|