Bazel rules for GWT
[!WARNING]
Due to an absence of any maintainers, this repository is archived and currently unmaintained.We discourage any new dependencies on the contents of this repository.
If you, or your organization, are interested in revitalizing this project by taking over its maintenance, we welcome your initiative.
To discuss the process of un-archiving and assuming ownership of this repository, please reach out to us via email atbazel-contrib@googlegroups.com
or join the conversation on our Slack workspace in the#rules
channel.
You can sign up for Slack access at https://slack.bazel.build.
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:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "io_bazel_rules_gwt",
url = "https://github.com/bazelbuild/rules_gwt/archive/0.1.3.tar.gz",
sha256 = "3f017bd2f7734e259535da0bcc75398b883dda6da6b657dfa84bd02fab0a6916",
strip_prefix = "rules_gwt-0.1.3",
)
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 to com.google.gwt
2.8.0
)//external:gwt-user
(defaults to com.google.gwt
2.8.0
)//external:gwt_ant
(defaults to org.apache.ant
1.9.7
)//external:gwt_asm
(defaults to org.ow2.asm
5.0.3
)//external:gwt_colt
(defaults to colt
1.2.0
)//external:gwt_commons-io
(defaults to commons-io
2.4
)//external:gwt_gson
(defaults to com.google.code.gson
2.6.2
)//external:gwt_javax-servlet
(defaults to javax.servlet:javax.servlet-api:3.1.0
)//external:gwt_javax-validation
(defaults to javax.validation
1.0.0.GA
)//external:gwt_java-validation-src
(defaults to javax.validation
sources:1.0.0.GA
)//external:gwt_jetty-annotations
(defaults to org.eclipse.jetty
9.2.14.v20151106
)//external:gwt_jetty-http
(defaults to org.eclipse.jetty
9.2.14.v20151106
)//external:gwt_jetty-io
(defaults to org.eclipse.jetty
9.2.14.v20151106
)//external:gwt_jetty-jndi
(defaults to org.eclipse.jetty
9.2.14.v20151106
)//external:gwt_jetty-plus
(defaults to org.eclipse.jetty
9.2.14.v20151106
)//external:gwt_jetty-security
(defaults to org.eclipse.jetty
9.2.14.v20151106
)//external:gwt_jetty-server
(defaults to org.eclipse.jetty
9.2.14.v20151106
)//external:gwt_jetty-servlet
(defaults to org.eclipse.jetty
9.2.14.v20151106
)//external:gwt_jetty-servlets
(defaults to org.eclipse.jetty
9.2.14.v20151106
)//external:gwt_jetty-util
(defaults to org.eclipse.jetty
9.2.14.v20151106
)//external:gwt_jetty-webapp
(defaults to org.eclipse.jetty
9.2.14.v20151106
)//external:gwt_jetty-xml
(defaults to org.eclipse.jetty
9.2.14.v20151106
)//external:gwt_jsinterop
(defaults to com.google.jsinterop
1.0.0
)//external:gwt_jsinterop-src
(defaults to com.google.jsinterop
sources:1.0.0
)//external:gwt_jsr-250-api
(defaults to javax.annotation
1.0
)//external:gwt_sac
(defaults to org.w3c.css
1.3
)//external:gwt_tapestry
(defaults to 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 byMyApp.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, yoursrc/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 runningbazel build src/main/java/app:MyApp
. This will run the GWT compiler and place
all of its output as well as index.html
intobazel-bin/src/main/java/app/MyApp.war
. You can also runbazel 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 theexample/
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<name>-dev
: script that can be run via bazel run
to launch the app inAttributes | |
---|---|
name | Name, required A unique name for this rule. |
srcs | List of labels, optional
|
resources | List of labels, optional
|
modules | List of strings, required
|
pubs | List of labels, optional
|
deps | List of labels, optional
|
output_root | String, optional
|
java_roots | List of strings, optional
|
compiler_flags | List of strings, optional
|
compiler_jvm_flags | List of strings, optional
|
dev_flags | List of strings, optional
|
dev_jvm_flags | List of strings, optional
|