Building your first application
Tip: If you are not familiar with using Java with Bazel, it might be helpful to start with the Bazel Java Tutorial since J2CL closely follows Bazel Java idioms.
Let's get started with cloning the repository and build a sample app from source:
- Install Bazel 0.23.0:
$ npm install -g @firstname.lastname@example.org
(See Install Bazel for different platforms.)
- Clone this repository:
$ git clone https://github.com/google/j2cl.git
- Build the sample app:
$ cd j2cl/samples/helloworld $ bazel build src/main/java/com/google/j2cl/samples/helloworld:helloworld
Since we already built our first application, let's take a quick look at how the optimized output looks like:
$ cat bazel-bin/src/main/java/com/google/j2cl/samples/helloworld/helloworld.js Output: document.write('Hello from Java! and JS!');
Amazing, isn't it? When we say J2CL tightly optimizes, we really mean it!
The optimizations in the J2CL world frequently crosses the boundaries of two languages and drop anything you don't need in production to give you the leanest application possible. This is only feasible because J2CL is very closely integrated with Closure Compiler which enables the optimization of the whole app together.
Let's run the development server to see our application in action:
- Run the development server
$ bazel run src/main/java/com/google/j2cl/samples/helloworld:helloworld_dev_server
- Navigate to 'http://localhost:6006/helloworld_dev.html" in your browser.
Please take the time to play with the code and get a better feeling of how things are working.
ibazel is file-system watcher that auto-triggers bazel build when needed. To use
it, just replace
ibazel in any command:
Install ibazel and make sure it is in your path.
Run the development server
$ ibazel run src/main/java/com/google/j2cl/samples/helloworld:helloworld_dev_server
Navigate to 'http://localhost:6006/helloworld_dev.html" in your browser.
Edit any source (e.g.
HelloWorld.java), save and see the results. You will enjoy it more as it warms up!
You like build-on-save but you would like to refresh on your own terms? Pass
-nolive_reload while running ibazel.
Setting up your first project
To setup your first project you can use the sample as template:
$ cp -R <j2cl-repo>/samples/helloworld <my-repo>/<app-name> $ mv <my-repo>/<app-name>/WORKSPACE.remote <my-repo>/<app-name>/WORKSPACE
and you are done.