- Fix jar creation to always write the MANIFEST.MF file as the first entry (for ecosystem compatibility) #716
- Updated REPL-y to 0.4.3.
- Updated nREPL to 0.6.0.
- Fix
printHexBinary
for Java 11 support #702 - Fixes the regression introduced while handling sequential optargs #713
- Updated reply to 0.4.1 #711,#703
- Updated nREPL to 0.4.5. The new nREPL has a new artefact coordinates
(
nrepl/nrepl
) and a new namespace prefix (clojure.tools.nrepl.
->nrepl.
). While the nREPL protocol is 100% compatible with that of the 0.2.x series you'll have to make sure that any middleware you're using has been updated to target 0.4.x. You can find more details here and here. #703
- SLF4J warnings from the worker pod have been suppressed #676
- The change to
sift
made with #680 has been reverted because it had unexpected drawbacks. We will discuss how to proceed on #704.
If you happen to receive "Tried to use insecure HTTP repository without TLS",
it means your project was configured to download dependencies from a repository
that does not use TLS encryption.
This is NOT suppored anymore because it exposes you to trivially-executed
man-in-the-middle attacks.
In the rare event that you don't care about the security of the machines
running your project, you can enable support for unprotected repositories by
explicitely set a custom wagon-factory
:
;; never do this
(require 'cemerick.pomegranate.aether)
(cemerick.pomegranate.aether/register-wagon-factory!
"http "#(org.apache.maven.wagon.providers.http.HttpWagon.))
It's also possible you have a dependency which includes a reference to an
insecure repository for retrieving its own dependencies. If this happens it is
strongly recommended to add an :exclusion
and report a bug with the
dependency which does this.
Kudos to the folks working on
the related pomegranate
PR
and technomancy
for the above explanation.
- Boot is officially Maven Central compatible. Make sure the
sources
andjavadoc
artifacts are on the fileset and:classifier
is correctly set. - Environment variables BOOT_AS_ROOT, BOOT_WATCHERS_DISABLE und BOOT_COLOR accept
true
as a truthy value beside1
andyes
#631 - Bump pomegranate and dynapath to
1.0.0
. #612 - Digest
java.io.File
insteadString
path of jar at sift-action:add-jar
method #678 - Add warning about improper use of repl :eval option #666
- Parse complex optargs with sequential types, see wiki section #682
- Handle pom tag #579
- When directories or files cannot be opened by boot, don't fail but log something in debug level #598 & #629
fileset-diff
correctly handles nested data structures #566- Boot does not sign jars with classifiers #625
- Allow clojure source jar onto the classpath #654
- Fix
boot.tmpdir/cp
#502 - Split an argument in three #578
- Use bootignore patterns in watcher workers #663
- Make
(sift :move)
create resources. #680
- The Cheshire dependency in
boot/worker
has been updated to fix compatibility withs3-wagon-private
#679
set-env!
works even if the user has set*print-level*
or*print-length*
to non-nil in their$BOOT_HOME/profile.boot
. #587 #586tmpfile
"Commit: adding..." messages now only appear with-vv
which eases debugging tasks with-v
#557- Pod tests pass and can be run with
make
#567 - Improved error message when a user tries to use a multi-arity format for tasks. #574
- Sift now outputs meaningful things on debug #581
file-filter
(called by allby-*
functions) throws an error if no criteria are specified. #555
- When printing exception message from exception using
:boot.util/omit-stacktrace?
, escape%
in message to prevent errors about bad string formatting, and ensure that message ends in a newline. - Artifact upload slow because of an expensive evaluation of a debugging arguments for all calls to
transfer-listener
#565 #558 - With-cp does not consider source/resource paths
- Evaluation of boot script is now done via string concatenation and
load-string
, rather thanread-string
#547 - Improve robustness of built-in
notify
task #551
- Added the
socket-server
task for starting a Clojure 1.8.0+ socket server. #549 - Added the
call
task to execute arbitrary code as part of the pipeline, either via an existing function symbol or by providing a form. Similar to lein run,call
can be used, for example, to start a component system. - Added the
bare-repl
task for starting a simple interactive REPL session (a la clojure.main/repl) without launching a nREPL server. #582
- Added
boot.util/dosh-timed
. It works likeboot.util/dosh
except it takestimeout-ms
as the first argument, and throws an exception when the shell command takes more thantimeout-ms
milliseconds to execute. #561
- Added
-m, --mode
option to thetarget
task — specifies the file mode for written files — should only be used when defaultrw-------
is not enough. #537
- Follow symlinks when building fileset from project dirs #483.
- Documented
boot.core/add-cached-{asset,source,resource}
fns. - Documented
boot.core/patch!
fn #497. - Warn when asked to load a version of Clojure into the core pod (via
:dependencies
) that is different from the implicitly loaded version specified byBOOT_CLOJURE_VERSION
#230, #469. - Corrected docstring for
boot.pod/canonical-coord
. - Throw helpful exception when
deftask
argument vector isn't a vector #487. - Now uses io.aviso/pretty 0.1.33: this affects the order of reported stack frames #355. The old behavior can be restored with user configuration.
- Exceptions are now always reported using pretty, regardless of the setting of BOOT_COLOR (or the -C flag), but when colorization is disabled, pretty exception reporting will not use an ANSI color codes in its output. This is often preferable when output from Boot is being logged to a file.
- Support managed dependencies by upgrading pomegranate to 0.3.1. #526
- Use the Fastly CDN version of Clojars by default. #540
- Allow tasks to hide exception stacktrace with
:boot.util/omit-stracktrace?
ex-data property #486, #532.
- Print stack trace when core pod fails to load #480.
- Fix issue where
boot.util/map-as-dep
would flatten collections like:exclusions
in the dependency vector #479. - Use default voice when calling
say
on OSX #476. - Fix typo in the
notify
task that prevented OSX from finding theterminal-notifier
program #478. - Fix typo in the
notify
task that caused exceptions on OSX #491. - Don't throw exceptions when source files are missing during filesystem patch operations #471, #477.
- Preserve fileset metadata when TmpFiles are overwritten with
add-resource
,add-source
, etc. - Format paths in
boot.class.path
andfake.class.path
system properties with correct, platform-specific paths #488. - Eliminate runtime reflection in
boot.core/deftask
macro #490. d- Create bootscript tmpfile with mode0600
instead of0664
. - Previously, setting BOOT_COLOR to false was ignored, and the isWindows check overruled the BOOT_COLOR selection. Now, the default for colorization from isWindows is set only if BOOT_COLOR is blank #536
- Added the
with-cp
task — usejava -cp
style classpath strings instead of Maven dependencies. - The
pom
task now adds:project
metadata to the created pom.xml and pom.properties TmpFiles in the fileset. This metadata is used by eg. thejar
task to select the "real" pom from multiple poms that might be in the fileset from theuber
task, etc. #451 - The
watch
task now accepts--include
and--exclude
options to restrict the set of paths that will trigger a rebuild #312. - The
watch
task now accepts--debounce
option to adjust how long it will wait for all filesystem events to have fired before a rebuild is triggered. - On systems without audio output ,the
notify
task now prints an error message instead of throwing an exception #523
- Added
boot.pod/make-pod-cp
— creates a new pod from a given classpath. - Added
boot.pod/canonical-id
— returns the canonical form of a maven dependency id symbol. - Added
boot.pod/full-id
— returns the fully-qualified form of a maven dependency id symbol. - Added
:meta
option toboot.core/add-{asset,source,resource}
fns (and theiradd-cached-{asset,source,resource}
variants — merges a map of metadata into all TmpFiles added to the fileset.
- The
[
and]
characters can now be used to group tasks with their options and, more importantly, positional parameters. In the task body the positional parameters are bound to*args*
#374.
- Added
-E, --exclusions
— adds symbol to env:exclusions
#472. - Added
-f, --file
— evaluates the contents of a file just like with the shebang script, but easier to use on platforms like Windows that don't have great shebang support #465. - Added
-i, --init
— evaluates a form after evaluating the profile.boot forms but before the main script or build.boot forms #465. - Added
-x, --exclude-clojure
— addsorg.clojure/clojure
as a global exclusion (useful in combination with--dependencies
when you don't have a build.boot file, as most dependencies will depend on some random version of clojure and you'll get a warning about it) #230, #469. - Removed
-t, --target-path
and-T, --no-target
#475.
- Added
-p, --project
option to thejar
task — specifies the project id when there are multiple pom.xml files — should only be needed in the case where the jar will contain multiple poms and either the desired pom was not created via thepom
task or there are multiple poms created by thepom
task in the fileset #451. - Added
-C, --no-color
option to therepl
task — disables ANSI color codes in REPL client output.
- Removed
:target-path
#475.
- The
speak
task, replaced bynotify
.
Java 9 is slated for release sometime next year. It introduces breaking changes, and Boot might need to be continually updated to ensure that we're compatible with Java 9 once it's released.
- Improvements to work with Java 9 (boot repl works on Java 9-ea+148) that upgrade dynapath to 0.2.5. These changes require a newer boot-bin to function, but are backward compatible on Java 7 and 8. #539
- More efficient syncing of project directories with Boot's internal ones.
- Easier to read tree representation for the
show --fileset
output.
- Don't set
:update :always
in aether when resolving Boot's own dependencies unless Boot is being updated. - Correctly handle case when
:source-paths
or:resource-paths
are set to the empty set (#{}
). - Correctly set last modified time when copying classpath resource.
- Boot test suite (!!!) to test Boot itself, with parallel test runner capability and continuous integration.
boot.pod/this-pod
— aWeakReference
to the current podboot.pod/with-invoke-in
— low-level invocation, no serializationboot.pod/with-invoke-worker
— as above but invokes in the worker podboot.pod/pod-name
— get/set the name of a podboot.pod/coord->map
— dependency vector to map helper functionboot.pod/map->coord
— map to dependency vector helper functionboot.pod/resource-last-modified
— returns last modified time of a classpath resourceboot.core/get-checkouts
— returns a map of info about loaded checkout dependenciesboot.util/dbug*
— likeboot.util/dbug
but a macro (doesn't eval its arguments unless the verbosity level is DEBUG or above)
-c
,--checkouts
boot option /:checkouts
env key — deeper integration for checkout dependencies-o
,--offline
boot option — disable downloading Maven dependencies from remote repositories (doesn't apply to Boot's own dependencies)-U
,--update-snapshot
boot option — updates boot to latest snapshot version- optional argument to
-u
,--update
— sets global default boot version
-v
,--verify-deps
option toshow
task — verify jar signatures and show deps tree [#375][375]
- wagon dependencies now accept a
:schemes
key — specify the handler classes for the wagon when the wagon jar has noleiningen/wagons.clj
entry. BOOT_CERTIFICATES
— specify file paths for SSL certificates.BOOT_CLOJARS_REPO
— specify Maven repo url forclojars
.BOOT_CLOJARS_MIRROR
— specify Maven mirror url forclojars
.BOOT_MAVEN_CENTRAL_REPO
— specify Maven repo url formaven-central
.BOOT_MAVEN_CENTRAL_MIRROR
— specify Maven mirror url formaven-central
.
- The
checkout
task, replaced by the--checkouts
boot option
- Issue with 2.5.4 where it was possible for boot to exit before all files were written to target dir.
- The
target
task falls back to copying when hardlinks aren't possible #373. - Use a
ByteArrayInputStream
instead of aStringBufferInputStream
when parsingpom.xml
strings.
- Added docstrings to all previously undocumented vars in API namespaces.
- Warn and remove conflicting files from the fileset #361, #364.
- Restore
--as-jars
option touber
task that was accidentally removed. - Don't try to read
pom.xml
if there are none in the fileset. - Correctly handle extra arguments to
clifn
and throw on unknown options #346.
- Pretty-print boot script when
--verbose
boot option is specified #315. - Copy jars into cache when using the
--as-jars
option touber
#290. - Ignore source files matching regexes specified in
.bootignore
file #348.
- Misleading warning about
BOOT_EMIT_TARGET
#356. - Cross-device link errors when moving files from temp dirs #362.
- Issue with
--repo-map
option forpush
task #358. - Jar task not creating
MANIFEST.MF
in uberjar #360. - Jar task not using "friendly name" when there is exactly one pom.xml.
- Issue where
target
task would do nothing when no--dir
option given. - Add
--no-clean
option to disable cleaning of destination intarget
task. - Don't throw exception when
deftask
argument specs are invalid; warn instead.
- The
gpg
binary is now used instead of bouncycastle for signing jars and reading encrypted credentials files. There may be different behavior when resolving default keys, etc.
- Added
target
task andBOOT_EMIT_TARGET
env var #305. - Added
--developers
and--dependencies
options topom
task #233. - Added (ALPHA)
send!
function to work around issues passing large collections to pods viawith-eval-in
#339. - Added
add-cached-{asset,source,resource}
core functions. - Added
launch-nrepl
core function for starting repl servers in pods from the repl. - Added
gpg-decrypt
core function to decrypt gpg encrypted files. - Added
configure-repositories!
core function to configure maven repos dynamically (as a callback to add credentials, etc) #274, #311. - The
push
task can now be provided with--repo-map
option to set the deployment repository. This is useful for example in case a repository needs different settings for downloading dependencies and deploying, like additional credentials #274, #311. - The
install
andpush
tasks now accept a--pom
option which can be used to specify whichpom.xml
file to use #112, #278. - The
repl
task now accepts a--pod
option which can be used to start a repl in a specific pod. - The
show
task now accepts a--list-pods
option to show the names of all active pods.
- Better
uber
task performance #94. - Better
sift
task performance. - Better fileset performance.
- Better pod-pool performance #271.
- Better cli option error messages #285 & #322.
- Throw exception when source, resource, or asset paths overlap #235.
- Added last modified time to immutable fileset data #72.
- Resetting fileset merges initial fileset over user source files #330.
- Throw exception when fileset
mv
source doesn't exist #325. - Prevent duplicate tagging of commits in
push
task #328. - Bind
*compile-path*
in nREPL server environment #294. - Updated
tools.nrepl
version to support evaluating forms with reader conditionals in the repl #343. - Default jar exclusions no longer exclude
pom.{xml,properties}
#278. - Jars built without the
--file
option that contain multiplepom.xml
files are now named project.jar instead of named for coordinates derived from an arbitrarily selected pom #278. - Installing or pushing a jar without the
--pom
option that contains more than onepom.xml
now results in an exception instead of installing to coordinates derived from an arbitrarily selected pom #278. Stream Closed
exceptions when multiple pod pools are used #270
- The
push
task option--gpg-keyring
. - Implicit writing of artifacts to target directory.
- Fix issue where the wrong classloader was being used to load the boot application (270ec3d)
- Make sure exceptions during boot startup are flushed stdout before the process exits (4a20c74)
Fix issues with 2.4.0 release 61c948f
-
Need to delete files in the fileset dirs before writing to them because the underlying blob files are immutable.
-
Remove BOOT_CLOJURE_NAME dependency before adding jars to the classpath--this is a workaround for a really weird issue:
clojure.lang.ExceptionInfo: loader constraint violation: loader (instance of java/net/URLClassLoader) previously initiated loading for a different type with name "clojure/lang/Compiler$Expr"
- Self-downloading binaries--no longer need to manually download this when a new version is released. Also the provided binary works with all versions of boot since 2.0.0 inclusive (fixes #300).
- All boot env vars can now be set in properties files (fixes #229).
- Fix pod memory leaks (fixes #314 & #268).
- Fix issue with Cider and boot's auto-flush PrintWriter (fixes #298).
- Avoid calling javac on a fileset with no Java source files (fixes #309).
- Stop 'boot show -u' from displaying "LATEST" dependencies as out of date.
- Add boot.core/rebuild! function and add -M,--manual option to watch task to manually trigger rebuild from REPL instead of when source files change.
- Fix issue where uber task was trying to explode dependencies that have only a pom file and no jar (fixes #292).
- Improve uber task docstring/help text.
- Add -A/--add-asset, -R/--add-resource, -S/--add-source options to sift task (fixes #212).
- Add new merge strategy for uber task that concatenates duplicates
and use it for merging files in
META-INF/services/.*
. - Support merging duplicate files in uber task, defaulting to standard set of mergers. (fixes #217).
- Preserve last modified time of files when unpacking JARs (fixes #211).
- Improvements to pom task (fixes #220, see d8782413).
- Fix file handle leaks when unpacking JAR files. (fixes issues relating to invalid uberjars being generated).
- Add support for .cljc files (see reader conditionals introduced in Clojure 1.7.0).
- Support passing arguments to javac in javac task.
- Update default Clojure version to 1.7.0.
- Fix
BOOT_LOCAL_REPO
environment variable on Windows (fixes #243). - Make Clojure artifact name customizable via
BOOT_CLOJURE_NAME
environment variable, which defaults to org.clojure/clojure.