Create uberjar file. An uberjar is a self-contained jar file containing
both the project contents AND the contents of all dependencies.
The project contents are represented by the class-dir. Use other tasks to
put Clojure source, class files, a pom file, or other resources in the
class-dir. In particular, see the copy-dir, write-pom, compile-clj, and
javac tasks.
The dependencies are pulled from the basis. All transitive deps will be
included. Dependency jars are expanded for inclusion in the uberjar.
Use :exclude to exclude specific paths from the expanded deps. Use
conflict-handlers to handle conflicts that may occur if two dependency
jar files include a file at the same path. See below for more detail.
If a main class or manifest are provided, those are put in the uberjar
META-INF/MANIFEST.MF file. Providing a main allows the jar to be
invoked with java -jar.
Returns nil.
Options:
:uber-file - required, uber jar file to create
:class-dir - required, local class dir to include
:basis - used to pull dep jars
:main - main class symbol
:manifest - map of manifest attributes, merged last over defaults + :main
:exclude - coll of string patterns (regex) to exclude from deps
:conflict-handlers - map of string pattern (regex) to built-in handlers,
symbols to eval, or function instances
When combining jar files into an uber jar, multiple jars may contain a file
at the same path. The conflict handlers are a map of string regex pattern
to:
a keyword (to use a built-in handler) or
a symbol (to resolve and invoke) or
a function instance
The special key `:default` specifies the default behavior if not matched.
Conflict handler signature (fn [params]) => effect-map:
params:
:path - String, path in uber jar, matched by regex
:in - InputStream to incoming file (see stream->string if needed)
:existing - File, existing File at path
:lib - symbol, lib source for incoming conflict
:state - map, available for retaining state during uberjar process
Handler should return effect-map with optional keys:
:state - updated state map
:write - map of string path to map of :string (string) or
:stream (InputStream) to write and optional :append
flag. Omit if no files to write.
Available built-in conflict handlers:
:ignore - don't do anything (default)
:overwrite - overwrite (replaces prior file)
:append - append the file with a blank line separator
:append-dedupe - append the file but dedupe appended sections
:data-readers - merge data_readers.clj
:warn - print a warning
:error - throw an error
Default conflict handlers map:
{"^data_readers.clj[c]?$" :data-readers
"^META-INF/services/.*" :append
"(?i)^(META-INF/)?(COPYRIGHT|NOTICE|LICENSE)(\\.(txt|md))?$" :append-dedupe
:default :ignore}