Here are five globbing techniques for including multiple input files, with documentation extracted from the CommandLineRunner
class:
(1) This is a variation of muka's technique, removing the --js
flag, which is not needed:
java -jar compiler.jar \
--js_output_file build/out.js `find ./src/*.js`
From the docs:
The --js
flag name is optional, because args are interpreted as files by default.
This will include all .js
files in /src/
, but won't include any files in subdirectories of /src/
.
(2) Similar to 1, but will include all .js
files in /src/
and all its subdirectories:
java -jar compiler.jar \
--js_output_file build/out.js `find ./src/ -name '*.js'`
(3) Similar to 2, but uses xargs
:
find ./src/ -name '*.js' \
| xargs java -jar compiler.jar \
--js_output_file build/out.js \
--manage_closure_dependencies
From the docs:
It is convenient to leverage the additional arguments feature when using the
Closure Compiler in combination with find
and xargs
:
find MY_JS_SRC_DIR -name '*.js' \
| xargs java -jar compiler.jar --manage_closure_dependencies
The find
command will produce a list of '*.js' source files in
the MY_JS_SRC_DIR
directory while xargs
will convert them
to a single, space-delimited set of arguments that are appended to the
java
command to run the Compiler.
Note that it is important to use the
--manage_closure_dependencies
option in this case because the
order produced by find
is unlikely to be sorted correctly with
respect to goog.provide()
and goog.requires()
.
(4) The v20140625
release added support for the **
(globstar) wildcard, which recursively
matches all subdirectories.
For example, this will include all .js
files in /src/
and all its subdirectories:
java -jar compiler.jar \
--js_output_file build/out.js './src/**.js'
More info here. From the docs:
You may also use minimatch-style glob patterns. For example, use:
--js='**.js' --js='!**_test.js'
to recursively include all js files that do not end in _test.js
From the Java docs:
The following rules are used to interpret glob patterns:
- The
*
character matches zero or more characters of a name component without crossing directory boundaries.
- The
**
characters matches zero or more characters crossing directory boundaries.
(5) The v20140625
release also added a new feature: if the input path is a directory, then all .js
files
in that directory and all subdirectories will be included.
For example, this will include all .js
files in /src/
and all its subdirectories:
java -jar compiler.jar \
--js_output_file build/out.js './src/'
More info here.