- 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
printHexBinaryfor 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
siftmade 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
sourcesandjavadocartifacts are on the fileset and:classifieris correctly set. - Environment variables BOOT_AS_ROOT, BOOT_WATCHERS_DISABLE und BOOT_COLOR accept
trueas a truthy value beside1andyes#631 - Bump pomegranate and dynapath to
1.0.0. #612 - Digest
java.io.FileinsteadStringpath of jar at sift-action:add-jarmethod #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-diffcorrectly 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/workerhas 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-vvwhich 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
notifytask #551
- Added the
socket-servertask for starting a Clojure 1.8.0+ socket server. #549 - Added the
calltask to execute arbitrary code as part of the pipeline, either via an existing function symbol or by providing a form. Similar to lein run,callcan be used, for example, to start a component system. - Added the
bare-repltask 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/doshexcept it takestimeout-msas the first argument, and throws an exception when the shell command takes more thantimeout-msmilliseconds to execute. #561
- Added
-m, --modeoption to thetargettask — 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
deftaskargument 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-depwould flatten collections like:exclusionsin the dependency vector #479. - Use default voice when calling
sayon OSX #476. - Fix typo in the
notifytask that prevented OSX from finding theterminal-notifierprogram #478. - Fix typo in the
notifytask 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.pathandfake.class.pathsystem properties with correct, platform-specific paths #488. - Eliminate runtime reflection in
boot.core/deftaskmacro #490. d- Create bootscript tmpfile with mode0600instead 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-cptask — usejava -cpstyle classpath strings instead of Maven dependencies. - The
pomtask now adds:projectmetadata to the created pom.xml and pom.properties TmpFiles in the fileset. This metadata is used by eg. thejartask to select the "real" pom from multiple poms that might be in the fileset from theubertask, etc. #451 - The
watchtask now accepts--includeand--excludeoptions to restrict the set of paths that will trigger a rebuild #312. - The
watchtask now accepts--debounceoption 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
notifytask 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
:metaoption 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/clojureas a global exclusion (useful in combination with--dependencieswhen 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-pathand-T, --no-target#475.
- Added
-p, --projectoption to thejartask — 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 thepomtask or there are multiple poms created by thepomtask in the fileset #451. - Added
-C, --no-coloroption to therepltask — disables ANSI color codes in REPL client output.
- Removed
:target-path#475.
- The
speaktask, 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 --filesetoutput.
- Don't set
:update :alwaysin aether when resolving Boot's own dependencies unless Boot is being updated. - Correctly handle case when
:source-pathsor:resource-pathsare 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— aWeakReferenceto 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/dbugbut a macro (doesn't eval its arguments unless the verbosity level is DEBUG or above)
-c,--checkoutsboot option /:checkoutsenv key — deeper integration for checkout dependencies-o,--offlineboot option — disable downloading Maven dependencies from remote repositories (doesn't apply to Boot's own dependencies)-U,--update-snapshotboot option — updates boot to latest snapshot version- optional argument to
-u,--update— sets global default boot version
-v,--verify-depsoption toshowtask — verify jar signatures and show deps tree [#375][375]
- wagon dependencies now accept a
:schemeskey — specify the handler classes for the wagon when the wagon jar has noleiningen/wagons.cljentry. 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
checkouttask, replaced by the--checkoutsboot option
- Issue with 2.5.4 where it was possible for boot to exit before all files were written to target dir.
- The
targettask falls back to copying when hardlinks aren't possible #373. - Use a
ByteArrayInputStreaminstead of aStringBufferInputStreamwhen parsingpom.xmlstrings.
- Added docstrings to all previously undocumented vars in API namespaces.
- Warn and remove conflicting files from the fileset #361, #364.
- Restore
--as-jarsoption toubertask that was accidentally removed. - Don't try to read
pom.xmlif there are none in the fileset. - Correctly handle extra arguments to
clifnand throw on unknown options #346.
- Pretty-print boot script when
--verboseboot option is specified #315. - Copy jars into cache when using the
--as-jarsoption touber#290. - Ignore source files matching regexes specified in
.bootignorefile #348.
- Misleading warning about
BOOT_EMIT_TARGET#356. - Cross-device link errors when moving files from temp dirs #362.
- Issue with
--repo-mapoption forpushtask #358. - Jar task not creating
MANIFEST.MFin uberjar #360. - Jar task not using "friendly name" when there is exactly one pom.xml.
- Issue where
targettask would do nothing when no--diroption given. - Add
--no-cleanoption to disable cleaning of destination intargettask. - Don't throw exception when
deftaskargument specs are invalid; warn instead.
- The
gpgbinary 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
targettask andBOOT_EMIT_TARGETenv var #305. - Added
--developersand--dependenciesoptions topomtask #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-nreplcore function for starting repl servers in pods from the repl. - Added
gpg-decryptcore 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
pushtask can now be provided with--repo-mapoption 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
installandpushtasks now accept a--pomoption which can be used to specify whichpom.xmlfile to use #112, #278. - The
repltask now accepts a--podoption which can be used to start a repl in a specific pod. - The
showtask now accepts a--list-podsoption to show the names of all active pods.
- Better
ubertask performance #94. - Better
sifttask 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
mvsource doesn't exist #325. - Prevent duplicate tagging of commits in
pushtask #328. - Bind
*compile-path*in nREPL server environment #294. - Updated
tools.nreplversion 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
--fileoption that contain multiplepom.xmlfiles are now named project.jar instead of named for coordinates derived from an arbitrarily selected pom #278. - Installing or pushing a jar without the
--pomoption that contains more than onepom.xmlnow results in an exception instead of installing to coordinates derived from an arbitrarily selected pom #278. Stream Closedexceptions when multiple pod pools are used #270
- The
pushtask 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_REPOenvironment variable on Windows (fixes #243). - Make Clojure artifact name customizable via
BOOT_CLOJURE_NAMEenvironment variable, which defaults to org.clojure/clojure.