A couple of users have asked about how to generate javadoc with Bazel. There’s no built-in way, but I figured it might be useful to whip together a new rule to do so.
If you’d like to use this rule, download it to your workspace, load it in your build file, and give it a list of sources:
load("/javadoc", "javadoc") javadoc( name = "app-doc", srcs = glob(["**/*.java"]), )
Then build:
$ bazel build :app-doc INFO: Found 1 target... Target //:app-doc up-to-date: bazel-bin/app-doc.zip INFO: Elapsed time: 0.141s, Critical Path: 0.00s
Now, if you look at bazel-bin/app-doc.zip
, you can see that it contains the HTML tree generated by javadoc:
$ unzip -l bazel-bin/app-doc.zip Archive: bazel-bin/app-doc.zip Length Date Time Name --------- ---------- ----- ---- 6990 2015-09-28 15:06 app-doc/SomeClass.html 568 2015-09-28 15:06 app-doc/allclasses-frame.html 548 2015-09-28 15:06 app-doc/allclasses-noframe.html ...
You can then unzip it wherever you want to view your docs.
Note that this is an extremely limited implementation: I just dashed this off in 20 minutes. It doesn’t support any javadoc options and probably doesn’t handle dependencies correctly. Let me know if you have any issues with it and I can implement improvements as needed.
One thing to be aware of is that if this is used from a target that has subpackages, the glob pattern won’t pick up classes in the subpackages. See limitations and caveats here: http://bazel.io/docs/be/functions.html#glob
LikeLike