= image:docs/logo.svg[Mill Logo] Mill :idprefix: :idseparator: - :link-github: https://github.com/com-lihaoyi/mill :link-current-doc-site: https://mill-build.org :link-mill-moduledefs: https://github.com/com-lihaoyi/mill-moduledefs :example-scala-version: 3.3.4 :toc: :toc-placement: preamble ifndef::env-github[] :icons: font endif::[] ifdef::env-github[] :caution-caption: 🔥 :important-caption: ❗ :note-caption: 📎 :tip-caption: 💡 :warning-caption: ⚠️ endif::[]
{link-github}/actions/workflows/run-tests.yml[image:{link-github}/actions/workflows/run-tests.yml/badge.svg[Build and Release]] https://index.scala-lang.org/com-lihaoyi/mill/mill-main[image:https://index.scala-lang.org/com-lihaoyi/mill/mill-main/latest.svg[Mill]] https://www.patreon.com/lihaoyi[image:https://img.shields.io/badge/patreon-sponsor-ff69b4.svg[Patreon]]
Mill is a fast JVM build tool that supports Java and Scala. Mill aims to make your project’s build process performant, maintainable, and flexible.
== Documentation
If you want to use Mill in your own projects, check out our documentation:
Here is some quick example, so that you can imagine how it looks:
import mill., scalalib.
object foo extends ScalaModule { def scalaVersion = "{example-scala-version}" }
If you use Mill and like it, you will probably enjoy the following book by the Author:
The remainder of this readme is developer-documentation targeted at people who wish to work on Mill's own codebase. The developer docs assume you have read through the user-facing documentation linked above. It's also worth spending a few minutes reading the following blog posts to get a sense of Mill's design & motivation:
Mill is profiled using the https://www.ej-technologies.com/products/jprofiler/overview.html[JProfiler Java Profiler], by courtesy of EJ Technologies.
Mill is built using Mill.
To begin, you just need a JVM installed, and the
./mill
script will be sufficient to bootstrap the project.
== IntelliJ Setup
If you are using IntelliJ IDEA to edit Mill's Scala code, IntelliJ's built in BSP support should
be sufficient to load the Mill project, but you need to set up the file association from
*.mill
as Scala source files manually in the following settings:
Settings
/ Editor
/ File Types
/ Scala
, add the pattern *.mill
== Manual & Automated Testing
The following table contains the main ways you can test the code in
com-lihaoyi/mill
, via manual testing or automated tests:
|===
| Config | Automated Testing | Manual Testing | Manual Testing CI
| In-Process Tests | main.__.test
, scalalib.test
, contrib.buildinfo.test
, etc. | |
| Sub-Process w/o packaging/publishing| example.\\__.local
, integration.__.local
| dist.run
| test-mill-dev.sh
| Sub-Process w/ packaging/publishing | example.\\__.server
, integration.__.server
| dist.assembly
| test-mill-release.sh
| Bootstrapping: Building Mill with your current checkout of Mill | | installLocal
| test-mill-bootstrap.sh
|===
In general, println
or pprint.log
should work in most places and be sufficient for
instrumenting and debugging the Mill codebase. In the occasional spot where println
doesn't work you can use mill.main.client.DebugLog.println
which writes to a file
~/mill-debug-log.txt
in your home folder. DebugLog
is useful for scenarios like
debugging Mill's terminal UI (where println
would mess things up) or subprocesses
(where stdout/stderr may get captured or used and cannot be used to display your own
debug statements).
=== In-Process Tests
In-process tests live in the .test
sub-modules of the various Mill modules.
These range from tiny unit tests, to larger integration tests that instantiate a mill.testkit.BaseModule
in-process and a UnitTester
to evaluate tasks on it.
Most "core" tests live in main.__test
; these should run almost instantly, and cover most of Mill's functionality that is not specific to Scala/Scala.js/etc..
Tests specific to Scala/Scala.js/Scala-Native live in
scalalib.test
/scalajslib.test
/scalanativelib.test
respectively, and take a lot longer to run because running them involves actually compiling Scala code.
The various contrib
modules also have tests in this style, e.g.
contrib.buildinfo.test
Note that the in-memory tests compile the BaseModule
together with the test suite, and do not exercise the Mill script-file bootstrapping, transformation, and compilation process.
=== Sub-Process Tests without Packaging/Publishing
example.\\__.local
and integration.__.local
tests run Mill end-to-end in a subprocess, but without the expensive/slow steps of packaging the core packages into an assembly jar and publishing the remaining packages to
~/.ivy2/local
.
You can reproduce these tests manually using
./mill dist.run <test-folder-path> <command>
.
example
tests are written in a single build.mill
file, with the test commands written in a comment with a bash-like syntax together with the build code and comments that explain the example.
These serve three purposes:
Basic smoke-tests to make sure the functionality works at all, without covering every edge case
User-facing documentation, with the test cases, test commands, and explanatory comments included in the Mill documentation site
Example repositories, that Mill users can download to bootstrap their own projects
The integration
tests are similar to example
tests and share most of their test infrastructure, but with differences:
integration
tests are meant to test features more thoroughly then
example
tests, covering more and deeper edge cases even at the expense of readability
integration
tests are written using a Scala test suite extending
IntegrationTestSuite
, giving more flexibility at the expense of readability
You can reproduce any of the tests manually using dist.run
, e.g.
Automated Test
Manual Test
Manual Test using Launcher Script
=== Sub-Process Tests with Packaging/Publishing
example.\\__.server
, integration.__.server
, example.\\__.fork
and
integration.__.fork
cover the same test cases as the .local
tests described above, but they perform packaging of the Mill core modules into an assembly jar, and publish the remaining modules to ~/.ivy2/local
.
This results in a more realistic test environment, but at the cost of taking tens-of-seconds more to run a test after making a code change.
You can reproduce these tests manually using dist.assembly
:
There are two flavors of these tests:
.server
test run the test cases with the default configuration, so consecutive commands run in the same long-lived background server process
.fork
test run the test cases with --no-server
, meaning each command runs in a newly spawned Mill process
In general you should spend most of your time working with the .local
version of the example
and integration
tests to save time, and only run .fork
or .server
once .local
is passing.
=== Bootstrapping: Building Mill with your current checkout of Mill
To test bootstrapping of Mill's own Mill build using a version of Mill built from your checkout, you can run
This creates a standalone assembly at target/mill-release
you can use, which references jars published locally in your ~/.ivy2/local
cache, and applies any necessary patches to build.mill
to deal with changes in Mill between the version specified in .config/mill-version
that is normally used to build Mill and the HEAD
version your assembly was created from.
You can then use this standalone assembly to build & re-build your current Mill checkout without worrying about stomping over compiled code that the assembly is using.
This assembly is design to work on bash, bash-like shells and Windows Cmd.
If you have another default shell like zsh or fish, you probably need to invoke it with sh ~/mill-release
or prepend the file with a proper shebang.
If you want to install into a different location or a different Ivy repository, you can set its optional parameters.
/tmp
=== Testing Documentation Changes
For testing documentation changes locally, you can generate documentation for the current checkout via
To generate documentation for both the current checkout and earlier versions, you can use
=== Troubleshooting
In case of troubles with caching and/or incremental compilation, you can always restart from scratch removing the out
directory:
== Project Layout
The Mill project is organized roughly as follows:
=== Core modules that are included in the main assembly
runner
, main.*
, scalalib
, scalajslib
, scalanativelib
.These are general lightweight and dependency-free: mostly configuration & wiring of a Mill build and without the heavy lifting.
Heavy lifting is delegated to the worker modules (described below), which the core modules resolve from Maven Central (or from the local filesystem in dev) and load into isolated classloaders.
=== Worker modules that are resolved from Maven Central
scalalib.worker
, scalajslib.worker[0.6]
, scalajslib.worker[1.0]
These modules are where the heavy-lifting happens, and include heavy dependencies like the Scala compiler, Scala.js optimizer, etc.. Rather than being bundled in the main assembly & classpath, these are resolved separately from Maven Central (or from the local filesystem in dev) and kept in isolated classloaders.
This allows a single Mill build to use multiple versions of e.g. the Scala.js optimizer without classpath conflicts.
=== Contrib modules
contrib/bloop/
, contrib/flyway/
, contrib/scoverage/
, etc.These are modules that help integrate Mill with the wide variety of different tools and utilities available in the JVM ecosystem.
These modules are not as stringently reviewed as the main Mill core/worker codebase, and are primarily maintained by their individual contributors. These are maintained as part of the primary Mill Github repo for easy testing/updating as the core Mill APIs evolve, ensuring that they are always tested and passing against the corresponding version of Mill.
== Compatibility & Stability
Mill maintains backward binary compatibility for each major version (major.minor.point
), enforced with Mima, for the following packages:
mill.api
mill.util
mill.define
mill.eval
mill.resolve
mill.scalalib
mill.scalajslib
mill.scalanativelib
Other packages like mill.runner
, mill.bsp
, etc. are on the classpath but offer no compatibility guarantees.
Currently, Mill does not offer compatibility guarantees for mill.contrib
packages, although they tend to evolve slowly.
This may change over time as these packages mature over time.
== Project Maintenance
=== Pull Requests
=== Commit Messages
Pull request: <link>
Co-authored-by: <author>
// tag::changelog[] == Changelog ifndef::link-github[] :link-github: https://github.com/com-lihaoyi/mill endif::[] :link-compare: {link-github}/compare :link-pr: {link-github}/pull :link-issue: {link-github}/issues :link-milestone: {link-github}/milestone // find-replace-regex: https://github.com/com-lihaoyi/mill/pull/(\d*) -> {link-pr}/$1[#$1]
[#0-12-0-RC3] === 0.12.0-RC3
Changes since 0.12.0-RC2
-j
/--jobs
now allows computed values of the form -j 0.5C
(half as many jobs as cores) or
-j C-2
(two less jobs than cores) to allow for automatic scaling based on the number of cores available
{link-pr}/3554[#3554]
Fix testOnly
handling of ScalaTest tagged tests {link-pr}/3557[#3557]
Make ./mill without any arguments point you towards --help, flesh out --help into a cheat sheet {link-pr}/3556[#3556]
Use Task
instead of T
when constructing targets and other tasks {link-pr}/3565[#3565]. The new syntax
(given below) is intended to be more idiomatic Scala and less idiosyncratic. The old syntax will continue
to work for backwards compatibility, but using the new syntax is recommended
** T {...}
-> Task {...}
** T.command {...}
-> Task.Command {...}
** T.input {...}
-> Task.Input {...}
** T.source {...}
-> Task.Source {...}
** T.sources {...}
-> Task.Sources {...}
** T.persistent {...}
-> Task(persistent = true) {...}
** T.task {...}
-> Task.Anon {...}
Introduced Task.Command(exclusive = true)
to allow explicit annotation of which
commands need to run without parallelism, allowing .test
and other commands
to run parallel by default {link-pr}/3617[#3617]
Lots of added docs for Building Kotlin with Mill: ** Kotlin Build Examples and Linting {link-pr}/3555[#3555], with KtLint and Detekt support ** Kotlin Module Configuration {link-pr}/3585[#3585] ** Publishing and Testing Kotlin with Mill {link-pr}/3589[#3589] ** Using Mill to build a Ktor web server {link-pr}/3621[#3621]
Additional support for Kotlin tools and frameworks ** KtFmt support {link-pr}/3620[#3620] ** Kover support {link-pr}/3624[#3624]
Show Worker tasks in resolve
/show
/inspect
{link-pr}/3580[#3580]
mill clean
now terminates Worker tasks {link-pr}/3579[#3579]
Overhaul of the terminal "ticker" UI for displaying task progress to better support parallel builds {link-pr}/3577[#3577] ** Mill now shows all active tasks and their duration at the bottom of your terminal ** Stream task logs are now prefixed with the task index on the left and the task name above, so you can attribute each line of logs to the task that generated it
...
[3861/4712] main.client.publishLocalCached
[3861] Publishing Artifact(com.lihaoyi,mill-main-client,0.12.0-RC2-67-a566d8-DIRTY875bcbb1) to ivy repo /Users/lihaoyi/.ivy2/local
[3868/4712] runner.client.publishLocalCached
[3868] Publishing Artifact(com.lihaoyi,mill-runner-client,0.12.0-RC2-67-a566d8-DIRTY875bcbb1) to ivy repo /Users/lihaoyi/.ivy2/local
[3869/4712] ======================================= installLocalCache ============================================== 4s
[3676] scalajslib.worker-api.docJar 1s
[3688] scalanativelib.worker-api.docJar 1s
[3706] contrib.playlib.worker[2.9].docJar 1s
[3707] contrib.playlib.worker[2.6].docJar 1s
... and 3 more threads
Add API for tasks to spawn concurrent and parallel futures via Task.fork.{async,await}
{link-pr}/3478[#3478]
Allow large test modules with many classes to be broken up to use multiple concurrent JVMs
by overriding def testForkGrouping
{link-pr}/3478[#3478]
Use coursier thread pool to run coursier-related tasks to avoid deadlocks {link-pr}/3614[#3614]
inspect
now shows useful information when used on modules, not just tasks {link-pr}/3532[#3532]
$ ./mill inspect dist0
dist0(build.mill:745)
Version of [[dist]] meant for local integration testing within the Mill
repo. Looks mostly the same as [[dist]], except it does not have a reference
to itself in its [[testTransitiveDeps]], to avoid a circular dependency.
Inherited Modules: MillPublishJavaModule
Module Dependencies: runner, idea
Default Task: dist0.run
Tasks: dist0.fix, dist0.testTransitiveDeps
mill init
now supports creating a project based on examples from Mill's documentation {link-pr}/3583[#3583],
and unpacks the example into the current folder rather than a subfolder {link-pr}/3626[#3626]
MILL_TEST_RESOURCE_FOLDER
has been renamed to MILL_TEST_RESOURCE_DIR
for consistency with other
environment variable names {link-pr}/3637[#3637]
[#0-12-0-RC2] === 0.12.0-RC2 - 2024-09-16
Changes since 0.12.0-RC1
Support exclude
attribute in Dep
parser. You can give exclusions with ;exclude=org:name
or ;exclude=org:*
or ;exclude=*:name
{link-pr}/3492[#3492]
Fix ScalaModule#console
by properly inheriting streams {link-pr}/3500[#3500]
Adjust codegen to allow custom mainargs.TokensReader
s, and include a
mainargs.TokensReader[os.Path]
by default for convenience {link-pr}/3504[#3504]
Update to https://github.com/com-lihaoyi/os-lib?tab=readme-ov-file#0-10-7[OS-Lib 0.10.7] to
allow concise multi-segment sub-paths; you can now write os.pwd / "foo/bar/qux"
rather than
os.pwd / "foo" / "bar" / "qux"
Add JavaModule.mandatoryJavacOptions
. Those are not propagated to the inner test
traits intentionally, since those options are typically configured by other means,
e.g. dedicated targets. {link-pr}/3503[#3503]
Add plugins to run Checkstyle and generate reports {link-pr}/3516[#3516]
Simplified PublishModule
's publishing setup via {link-pr}/3523[#3523]. You can now
run mill mill.scalalib.PublishModule/
with the proper environment variables (below) and
it should do the right thing by default
** Prefix all environment variables with MILL_
:
MILL_SONATYPE_USERNAME
, MILL_SONATYPE_PASSWORD
,
MILL_PGP_SECRET_BASE64
, MILL_PGP_PASSPHRASE
to try and add some
rudimentary ownership and namespacing
Allow external modules to have a defaultCommandName
{link-pr}/3545[#3545]. This has
been applied to ScalafmtModule
and PublishModule
, so you can
now autoformat your code via mill mill.scalalib.ScalafmtModule/
and publish it via
mill mill.scalalib.PublishModule/
without needing the /reformatAll __.sources
or /publishAll __.publishArtifacts
suffix
Integrated Kotlin integration as a first partly module and add example documentation {link-pr}/3514[#3514]. This is still pretty spartan, but we expect to flesh it out over time
Move .mill.sc
alternate file extension to .mill.scala
{link-pr}/3521[#3521]
[#0-12-0-RC1] === 0.12.0-RC1 - 2024-09-09
The upcoming 0.12.0 release focuses on improving the scalability of Mill builds: in terms of performance, code organization, adherence to best practices, and community. RC1 is intended to give people a time to try out the major changes so that any issues can be resolved before the release of 0.12.0 final (targeting end-September 2024).
Major changes:
Mill now runs tasks parallel by default, rather than opt-in. As every computer is multicore these days, and even laptops have 8-12 cores, Mill ensures you make the most of them when building your projects
Mill now allows for https://mill-build.org/mill/Structuring_Large_Builds.html[Modularizing Large Builds]
into multiple package.mill
files, to help support large codebases
Mill now runs itself, tasks, and tests in https://mill-build.org/mill/Mill_Sandboxing.html[Sandbox Folders] by default to mitigate the risk of filesystem-based race conditions due to parallelism
Mill now provides official support for https://mill-build.org/mill/Writing_Mill_Plugins.html[Writing Mill Plugins], with tested workflows and an official testkit to help you write and publish your own Mill plugins for others to use
0.12.x is binary compatible with 0.11.x, and so Mill plugins published for Mill 0.11.x can continue to be used without updating them. Although binary compatible, Mill 0.12.x does have breaking changes listed below with instructions provided on how to either disable the breaking change with a flag or adjust your code to accommodate it.
** Build file overhaul: Mill's build file management has been overhauled to better support large projects. See https://mill-build.org/mill/Structuring_Large_Builds.html[Structuring Large Builds] for details
*** Mill now uses .mill
as its file extension, with some semantic changes
from the old .sc
files to allow better IDE support. The .sc
extension is still supported
and its semantics are largely unchanged the ease the migration, but you should convert your Mill
configs to .mill
files to benefit from Mill's improved IDE experience going forward.
*** The build.sc
file has been renamed build.mill
to prevent confusion with Ammonite/Scala-CLI scripts,
and all associated .sc
files have been renamed to .mill
.
**** Until IntelliJ-Scala adds support for .mill
files built in, you can add it yourself via
Settings / Editor / File Types / Scala
and add the pattern *.mill
*** All .mill
files must have a package
declaration,
with package build
for .mill
files in the root folder and package build.foo.bar
for .mill
files in foo/bar/
.
**** The package declaration remains optional for legacy .sc
files
*** Only foo.mill
files in folders directly containing a build.mill
or package.mill
can
be imported via import $file
.
**** You need to create empty package.mill
files in any folder containing scripts if they are not already
adjacent to your build.mill
in the root folder
**** foo.sc
files can continue to be imported from arbitrary paths, to ease in the migration
*** Builds can now be modularized into per-folder definitions by defining package.mill
files in subfolders
{link-pr}/3213[#3213]. You can no longer define targets and modules in arbitrary foo.sc
files
**** All target and module definitions must be moved into package.mill
files in each folder.
*** $file
references in .mill
files are now absolute from the project root, and thus .^
to
refer to parent package is no longer supported, for consistency with other programming environments
**** $file
references in old .sc
files are unchanged and continue being relative, preserving the
current behavior.
** RootModule
s can only be named package
, e.g. object foo extends RootModule
must now be
named object `package` extends RootModule
.
*** If you have an existing RootModule
, you need to rename it object `package` extends RootModule
** Turn on parallelism for task evaluation by default, except for commands which always run serially at the end {link-pr}/3265[#3265]
*** This can be disabled by passing --jobs 1
** Mill uses empty sandbox folders as the working directory for running its own code and {link-pr}/3367[#3367] and test suites {link-pr}/3347[#3347], to avoid accidental interference between tasks and tests due to parallelism. See https://mill-build.org/mill/Mill_Sandboxing.html[Mill Sandboxing] for details
*** This can be disabled by adding def testSandboxWorkingDir = false
in your test module
** Mill commands now require arguments to be passed named via ./mill mycommand --key value
, rather than
allowing just ./mill mycommand value
. {link-pr}/3431[#3431].
*** You can pass in
--allow-positional-command-args
to fall back to the old behavior, or use @mainargs.arg(positional = true)
on individual parameters
** Dropped support for Java 8, Scala 2.11.x/3.1.x, and Scala-Native 0.4.x, following suit with the rest of the com-lihaoyi ecosystem. We now expect a minimum of Java 11, Scala 2.12.x/3.2.x, and Scala-Native 0.5.x
** --disable-callgraph-invalidation
is no longer supported. The flag is still accepted but is
now a no-op.
** Overhaul the Mill client-server protocol to improve robustness {link-pr}/3363[#3363] {link-pr}/3366[#3366] {link-pr}/3368[#3368] {link-pr}/3370[#3370]
** Mill now has explicitly supported workflows for third-party plugin authors, and
publishes unit, integration, and example test fixtures for writing plugins as mill-testkit
{link-pr}/3398[#3398] for downstream plugin authors to use in testing their own Mill extensions.
*** See https://mill-build.org/mill/Writing_Mill_Plugins.html[Writing Mill Plugins] for more details.
*** mill-testkit
is experimental and does not provide the same stability or binary-compatibility
guarantees as the rest of Mill. Nevertheless, if you are writing Mill plugins, please try it out
and let us know what you think!
** Bump default Sonatype Maven Central publishing timeouts to 10 minutes to avoid timeouts due to slowness https://github.com/com-lihaoyi/mill/commit/b4c9386b0233fab53a312426715e226e4a7f6302
** Importing Mill projects into IntelliJ via BSP now properly marks the out/
, .idea/
, and .bsp/
folders
as excluded {link-pr}/3329[#3329]
** Optimizations to Mill evaluation logic to reduce fixed overhead of running Mill on large projects {link-pr}/3388[#3388]
** Improvements to visualize
and visualizePlan
such that they no longer need to be
prefixed with show
and no longer need a separate graphviz
/dot
install on Mac-OSX
{link-pr}/3438[#3438]
** The following PRs are example upgrades of Mill from 0.11.x to 0.12.0-RC1 for various projects in the com.lihaoyi
ecosystem.
*** Trivial upgrades that just needed to bump a version: https://github.com/com-lihaoyi/geny/pull/87 , https://github.com/com-lihaoyi/sourcecode/pull/175, https://github.com/com-lihaoyi/fansi/pull/107, https://github.com/com-lihaoyi/PPrint/pull/141, https://github.com/com-lihaoyi/mainargs/pull/159/files, https://github.com/com-lihaoyi/fastparse/pull/319, https://github.com/com-lihaoyi/scalatags/pull/284
*** Less trivial upgrades, needing to make use of MILL_TEST_RESOURCE_DIR
or other explicit path references to be compatible with test sandboxing: https://github.com/com-lihaoyi/requests-scala/pull/174, https://github.com/com-lihaoyi/upickle/pull/627, https://github.com/com-lihaoyi/os-lib/pull/300, https://github.com/com-lihaoyi/scalasql/pull/30
[#0-11-12] === 0.11.12 - 2024-08-20 :version: 0.11.12 :milestone-name: 0.11.12 :milestone: 99 :prev-version: 0.11.11
Changes since {prev-version}:
build.sc
{link-pr}/3320[#3320]For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-11] === 0.11.11 - 2024-08-05 :version: 0.11.11 :milestone-name: 0.11.11 :milestone: 98 :prev-version: 0.11.10
We initially tagged 0.11.11
on 2024-11-31 but never published the released due to technical issues. On 2024-08-05 we re-tagged and published 0.11.11
.
Changes since {prev-version}:
defaultResolver().resolveDeps
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-10] === 0.11.10 - 2024-07-23 :version: 0.11.10 :milestone-name: 0.11.10 :milestone: 95 :prev-version: 0.11.9
Changes since {prev-version}:
Fixes and Improvements
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-9] === 0.11.9 - 2024-07-18 :version: 0.11.9 :milestone-name: 0.11.9 :milestone: 94 :prev-version: 0.11.8
Changes since {prev-version}:
New features
Fixes and Improvements
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-8] === 0.11.8 - 2024-06-21 :version: 0.11.8 :milestone-name: 0.11.8 :milestone: 93 :prev-version: 0.11.7
Changes since {prev-version}:
New features
jvmOptions
to docker contrib configuration {link-pr}/3079[#3079]JvmCompileClasspath
request {link-pr}/3086[#3086]scalaJSMinify: T[String]
{link-pr}/3094[#3094]TestModule
, add RunModule
{link-pr}/3064[#3064]run
-targets into RunModule
{link-pr}/3090[#3090]TestModule
: Support generation of JUnit-compatible xml report {link-pr}/3099[#3099] {link-pr}/3172[#3172] {link-pr}/3135[#3135] {link-pr}/3184[#3184]TestModule.discoveredTestClasses
target to ease test inspection {link-pr}/3191[#3191]PublishModule
{link-pr}/3222[#3222]Fixes and Improvements
VersionFinder
, increase speed, added ticker messages {link-pr}/3014[#3014]build.sc
with current library versions {link-pr}/3055[#3055]skipIdea = outer.skipIdea
{link-pr}/3098[#3098]inspect
command {link-pr}/3102[#3102]build.sc
in Bloop {link-pr}/3208[#3208]testOnly
does not match any test case {link-pr}/3224[#3224]Updates and internal changes
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-7] === 0.11.7 - 2024-02-05 :version: 0.11.7 :milestone-name: 0.11.7 :milestone: 91 :prev-version: 0.11.6
Changes since {prev-version}:
New features
type
attribute when parsing dependencies {link-pr}/2994[#2994]ScalaModule.scalacHelp
command {link-pr}/2921[#2921]ScalaModule.consoleScalacOptions
target {link-pr}/2948[#2948]publishLocalCached
and publishM2LocalCached
targets to PublishModule
{link-pr}/2976[#2976]Fixes and Improvements
Task.Input
s twice {link-pr}/2952[#2952]evaluateGroupCached
to avoid concurrent access to cache {link-pr}/2980[#2980]done
message from test framework to stdout) {link-pr}/2993[#2993]cliImports
value in generatedScriptSources
{link-pr}/2977[#2977]JavaModule.bspBuildTargetData
to make JavaModule
reports workable BuildTarget
{link-pr}/2930[#2930]logMessage
instead of diagnostics when textDocument
is unknown {link-pr}/2979[#2979]skipIdea = true
{link-pr}/2989[#2989]Updates and internal changes
Dependency updates: asm-tree 9.6, bsp4j 2.2.0-M1, coursier 2.1.8, jline 3.25.0, jna 5.14.0, junixsocket-core 2.8.3, log4j-core 2.22.1, mainargs 0.6.1, os-lib 0.9.3, scalafmt 3.7.15, Scala.js 1.15.0, scala-native 8.4.16, semanticdb-java 0.9.8, semanticdb-scala 4.8.15, upickle 3.1.4, zinc 1.9.6
Contrib dependency updates: Play 2.8.21, Play 2.9.1, Play 3.0.1
Documentation updates and new sections
More code cleanups, explicit result types and enforcement of some code quality metrics via mill-scalafix
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-6] === 0.11.6 - 2023-11-21 :version: 0.11.6 :milestone-name: 0.11.6 :milestone: 90 :prev-version: 0.11.5
Changes since {prev-version}:
Make PathRef
robust against concurrent filesyste modifications {link-pr}/2832[#2832]
Use logger error stream for informational messages {link-pr}/2839[#2839]
Harden assembly logic against Zip-Slip vulnerabilities {link-pr}/2847[#2847]
Add an option to disable incremental compilation with zinc {link-pr}/2851[#2851]
Add check for right Tests traits in ScalaJS and Native {link-pr}/2874[#2874]
Attempt to recover from client/server connection errors to {link-pr}/2879[#2879]
Fix discovery of targets whose names get mangled {link-pr}/2883[#2883]
Make mill show
skip -j
prefixes to ensure machine readability {link-pr}/2884[#2884]
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-5] === 0.11.5 - 2023-10-04 :version: 0.11.5 :milestone-name: 0.11.5 :milestone: 89 :prev-version: 0.11.4
Changes since {prev-version}:
Support for Java 21 {link-pr}/2768[#2768]
Various BSP improvements {link-pr}/2814[#2814], {link-pr}/2813[#2813], {link-pr}/2810[#2810], {link-pr}/2771[#2771]
The T.workspace
context path now always points to the top-level project directory, also for meta builds {link-pr}/2809[#2809]
Mill now better detects and reports logical cycles in inter-module dependencies {link-pr}/2790[#2790]
Fixed semanticDB data generation for meta builds {link-pr}/2809[#2809]
The prepareOffline
command also fetches relevant compiler-bridges for Scala modules {link-pr}/2791[#2791]
Improved ScalaJSModule
and added support for IRFileCache
{link-pr}/2783[#2783]
The JavaModule.zincReportCachedProblems
configuration can now also customized via a Java system property {link-pr}/2775[#2775]
Fixed a file truncation issue in protobuf module and print a warning when proto file get overwritten {link-pr}/2800[#2800]
Documentation improvements
Dependency updates: bsp4j 2.1.0-M7, castor 0.3.0, coursier-interface 1.0.19, jarjarabrams 1.9.0, jline 3.23.0, junitsocket 2.8.1, mainargs 0.5.4, scalafmt 3.7.14, Scala.js 1.14.0, semanticdb-java 0.9.6, semanticdb-scala 4.8.10
Various other improvements and cleanups
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-4] === 0.11.4 - 2023-09-19 :version: 0.11.4 :milestone-name: 0.11.4 :milestone: 88 :prev-version: 0.11.3
Changes since {prev-version}:
Discover
macro's generated generic code {link-pr}/2749[#2749]release-size
mode in ScalaNativeModule
{link-pr}/2754[#2754]For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-3] === 0.11.3 - 2023-09-17 :version: 0.11.3 :milestone-name: 0.11.3 :milestone: 87 :prev-version: 0.11.2
Changes since {prev-version}:
Allow Mill CLI to select the meta-build frame it operates on via --meta-level <n>
{link-pr}/2719[#2719]
Improve the mill resolve
suggestion when a user specifies a target in the wrong module {link-pr}/2731[#2731]
Fix conflicting dependencies between upstream JavaModules {link-pr}/2735[#2735]
Fix the scala-library dependency for (generic) platform modules {link-pr}/2739[#2739]
Fix terminal forwarding in .console
and .repl
commands {link-pr}/2743[#2743]
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-2] === 0.11.2 - 2023-08-28 :version: 0.11.2 :milestone-name: 0.11.2 :milestone: 86 :prev-version: 0.11.1
Changes since {prev-version}:
Target invalidation after making changes to build.sc
is now done at a fine-grained method-level granularity, using callgraph reachability analysis to see which targets depend on the code that was changed.
See {link-pr}/2417[#2417] for more details
Fix redirection of stdout stream to stderr when using show
{link-pr}/2689[#2689]
Fix line numbers in errors for scripts starting with leading comments or whitespace {link-pr}/2686[#2686]
Fix init
command and support runnig Mill without existing build.sc
file
{link-pr}/2662[#2662]
Fixes for BSP editor integration sometimes using the wrong output folder for meta-build metadata, causing subsequent builds from the command line to fail {link-pr}/2692[#2692]
Added a new mill.idea.GenIdea/idea
command to generate IntelliJ IDE metadata, improving-upon and replacing the older mill.scalalib.GenIdea/idea
command which is now deprecated {link-pr}/2638[#2638]
Update Coursier to 2.1.6 to mitigate CVE CVE-2022-46751 {link-pr}/2705[#2705]
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-1] === 0.11.1 - 2023-06-23 :version: 0.11.1 :milestone-name: 0.11.1 :milestone: 85 :prev-version: 0.11.0
Changes since {prev-version}:
mill.define.Cross
: Introduced default cross segments and some CLI conveniencemill.testrunner
: Fixed exception when running ScalaTest or ZIOTest frameworksmill.runner
: Removed some obsolete / defunct cli optionsmill.runner
: Properly distinct-ify commands when resolving wide matching target patternsmill.scalajslib
: Restored correct defaults for esFeature
mill.bsp
: Fixed a MatchError
in the buildtarget/scalaTestClasses
requestmill.contrib.bloop
: Corrected accidentally changed package name resulting in non-functional pluginmill.contrib.scoverage
: Fixed defunct plugin due to a missing type annotationFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-0] === 0.11.0 - 2023-06-06 :version: 0.11.0 :milestone-name: 0.11.0 :milestone: 84 :prev-version: 0.11.0-M11
This release is binary incompatible to {prev-version}.
Changes since {prev-version}:
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
// end::changelog[]
=== Older releases :leveloffset: +1
// tag::changelogOld[]
[#0-11-0-M11] === 0.11.0-M11 - 2023-06-04 :version: 0.11.0-M11 :milestone-name: 0.11.0-M11 :milestone: 83 :prev-version: 0.11.0-M10
This release is binary incompatible to {prev-version}.
Changes since {prev-version}:
Make foo.test
command run tests with user code in the boot classloader, rather than in a sub-classloader
{link-pr}/2561[#2561]
Mill backend server timeout is now configurable {link-pr}/2550[#2550]
Mill assembly is now distributed via Maven Central, rather than Github release assets, to remove an unnecessary single point of failure {link-pr}/2560[#2560]
Tests
inner trait was removed, to avoid trait shadowing which will be removed in Scala 3. Please use ScalaTests
, ScalaJSTests
, or
ScalaNativeTests
instead
{link-pr}/2558[#2558]
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-0-M10] === 0.11.0-M10 - 2023-05-24 :version: 0.11.0-M10 :milestone-name: 0.11.0-M10 :milestone: 82 :prev-version: 0.11.0-M9
This release is binary incompatible to {prev-version}.
Changes since {prev-version}:
Make mill.define.Module
a trait
to allow abstract/virtual modules to be trait
s rather than class
es
{link-pr}/2536[#2536]
Move mill.BuildInfo
to mill.main.BuildInfo
to avoid name conflicts with
mill.contrib.buildinfo.BuildInfo
{link-pr}/2537[#2537]
PlatformScalaModule
now exposes platformScalaSuffix
for user code to use
{link-pr}/2534[#2534]
Add Agg.when
operator to simplify common workflow of adding optional flags or command line parameters {link-pr}/2535[#2353]
Generalize handling of test module source folder layout, such that they always match the folder layout of the enclosing module {link-pr}/2531[#2531]
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-0-M9] === 0.11.0-M9 - 2023-05-18 :version: 0.11.0-M9 :milestone-name: 0.11.0-M9 :milestone: 80 :prev-version: 0.11.0-M8
This release is binary incompatible to {prev-version}.
Changes since {prev-version}:
Overhauled target resolution logic. It is now significantly lazier, resulting in less of the module tree being un-necessarily instantiated, and also more precise and predictable {link-pr}/2453[#2453] {link-pr}/2511[#2511]
Allow tasks to be passed as the CLI parameters of the run
command, allowing
run
to be easily used in the implementation of other tasks
{link-pr}/2452[#2452]
Task.Input
s are now watched properly with --watch
, and trigger re-evaluations when the watched value changes {link-pr}/2489[#2489]
Support for Java 20 {link-pr}/2501[#2501]
Broke up mill.modules
package {link-pr}/2513[#2513], with functionality re-distributed to mill.util
and mill.scalalib
Overhaul BSP-related code, for improved fidelity and correctness {link-pr}/2415[#2415] {link-pr}/2414[#2414] {link-pr}/2518[#2518] {link-pr}/2521[#2521]
Enabled compilation warnings in build.sc
{link-pr}/2519[#2519]
Print out the CLI flags when inspecting Task.Command
s
{link-pr}/2522[#2522]
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-0-M8] === 0.11.0-M8 - 2023-04-24 :version: 0.11.0-M8 :milestone-name: 0.11.0-M8 :milestone: 79 :prev-version: 0.11.0-M7
This release is binary incompatible to {prev-version}.
Changes since {prev-version}:
Added an https://github.com/com-lihaoyi/mill/tree/main/example[example/] folder in the Mill repo, containing common build setups demonstrating Mill features with explanations of how each feature works
Pre-compiled Scala incremental compiler interface {link-pr}/2424[#2424], to speed up clean builds
Add some helpers to simplify cross-version/cross-platform modules {#2406}[{link-pr}/2406]
You can now override T{...}
Target
s with Task.Source
or Task.Sources
, and vice versa {link-pr}/2402[#2402]
Removed the Ammonite script runner dependency used to evaluate build.sc
files and instead compile them using Mill {link-pr}/2377[#2377]
Add TestModule.ZioTest
{link-pr}/2432[#2432]
Caching fixes for external modules https://github.com/com-lihaoyi/mill/issues/2419[#2419]
Overhaul of the Mill BuildInfo
plugin, moving the key-value into resources to avoid needing to re-compile your module when the values change, adding
JavaModule
support, and allowing Javadoc/Scaladoc comments to be associated with the generated BuildInfo
constants {link-pr}/2425[#2425]
Global Configuration via ~/.mill/ammonite/predefScript.sc
is no longer supported in this version.
If that breaks your workflow, please report and tell us your use case so we can provide sufficient replacement or support for your use case before Mill 0.11.
Overhaul of the documentation. Created many executable example projects which are included in the documentation and run/tested on CI
Change cross module definitions to be traits instead of classes, for greater regularity and less builerplate at call sites. This change requires slight modification to existing build scripts that define cross modules.
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-0-M7] === 0.11.0-M7 - 2023-03-30 :version: 0.11.0-M7 :milestone-name: 0.11.0-M7 :milestone: 78 :prev-version: 0.11.0-M6
This release is binary incompatible to {prev-version}.
Changes since {prev-version}:
PathRef
validation for cached targets; default-enabled it for CoursierModule.resolveDeps
and various resolvedIvyDeps
targetsbsp
: Update Protocol version to 2.1.0-M4bsp
: Support new mainClasses
field in run and test environmentsbsp
: Fixed handling of Mill plugins and other improvementsscalanativelib
: new nativeDump
setting in ScalaNativeModule
contrib.twirllib
: Use newer scala-parser-combinators version when used with Scala 3contrib.scalapblib
: Added new flag to search for proto files in dependenciesFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-0-M6] === 0.11.0-M6 - 2023-03-09 :version: 0.11.0-M6 :milestone-name: 0.11.0-M6 :milestone: 77 :prev-version: 0.11.0-M5
This release is binary incompatible to {prev-version}.
Changes since {prev-version}:
main
: Re-added missing --color
and predef
cli arguments.For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-0-M5] === 0.11.0-M5 - 2023-03-09 :version: 0.11.0-M5 :milestone-name: 0.11.0-M5 :milestone: 76 :prev-version: 0.11.0-M4
This release is binary incompatible to {prev-version}.
Changes since {prev-version}:
Cross
is no longer adding the cross parameters to the millSourcePath
.You should review your cross modules setups to avoid build issues like incorrect source paths or missing files. CrossScalaModule
is not affected by this change.
PathRef
, moved JarManifest
to mill.main
scalalib
: Fixed loosing customized mapDependencies
when ScalaModule
get mixed in afterscalalib
: New TestModule.Weaver
scalajslib
: New JsEnvConfig.Selenium
testrunner
: Fixed concurrency issue with test event reportingFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-0-M4] === 0.11.0-M4 - 2023-02-10 :version: 0.11.0-M4 :milestone-name: 0.11.0-M4 :milestone: 74 :prev-version: 0.11.0-M3
This release is binary incompatible to {prev-version}.
Changes since {prev-version}:
scalalib
: New configuration target zincReportCachedProblems
which, when true
, enables reporting of all found problems, even for files which were not re-compiledscalalib
: Improved SemanticDB support for Java and Scalascalalib
: Mitigate another coursier download issuescalajslib
: Fetch more tooling dependencies in prepareOffline
scalanativelib
: Fetch more tooling dependencies in prepareOffline
scalanativelib
: Updated tools to version 0.4.10bsp
: Improved support for the mill-build
module which should improve the editing experience for build.sc
and other build filesFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-0-M3] === 0.11.0-M3 - 2023-01-23 :version: 0.11.0-M3 :milestone-name: 0.11.0-M3 :milestone: 73 :prev-version: 0.11.0-M2
This release is binary incompatible to {prev-version}.
Changes since {prev-version}:
out/
folder layout for overridden and private tasks.foo.overridden
we now use a foo.super
path to hold the metadata and scratch files.clean
command when used with arguments denoting modules.scalalib
: Fixed GenIdea
issues on Windows, when the build uses plugins or additional libraries.scalajslib
: ScalaJSModule.ScalaJSTests
now extends ScalaModule.ScalaTests
which improves consistency, better default values and compatibility with other modules like ScoverageModule
.scalanativelib
: ScalaNativeModule.ScalaNativeTests
now extends ScalaModule.ScalaTests
which improves consistency, better default values and compatibility with other modules.contrib.gitlab
: Improved error handling for token lookup and documentation.For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-0-M2] === 0.11.0-M2 - 2023-01-13 :version: 0.11.0-M2 :milestone-name: 0.11.0-M2 :milestone: 72 :prev-version: 0.11.0-M1
This release is binary incompatible to {prev-version}.
Changes since {prev-version}:
mill.bsp
and mill.bsp.worker
and removed various dependencies (guava, bsp4j, xtends, lsp4j, ...) from Mill APIscalalib
: Added support to generate semanticdb data for Java source filesscalajslib
: Added support for scalaJSOutputPattern
scalajslib
: Added suport for scalaJSSourceMap
scalajslib
: Dropped support for Scala.js 0.6For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-11-0-M1] === 0.11.0-M1 - 2022-12-17 :version: 0.11.0-M1 :prev-version: 0.10.10 :milestone: 70 :milestone-name: 0.11.0-M1
This release is binary incompatible to {prev-version}.
Changes since {prev-version}:
main
: Restrict Cross
parameter to be of type Module
scalalib
: Performance improvements in Zinc worker modulescalalib
: Resources are no longer added to compileClasspath
.scalalib
: Added new compileResources
which will end up in compileClasspath
scalalib
: Consolidated artifact and platform suffix handlingscalajslib
: Performance improvements in worker modulescalanativelib
: Performance improvements in worker moduleFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-15] === 0.10.15 - 2024-01-07 :version: 0.10.15 :milestone-name: 0.10.15 :milestone: 92 :prev-version: 0.10.13
Changes since {prev-version}:
semanticDbEnablePluginScalacOptions
protected and thus accessible for downstream use and customizationFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-13] === 0.10.13 - 2023-11-12 :version: 0.10.13 :milestone-name: 0.10.13 :milestone: 81 :prev-version: 0.10.12
Changes since {prev-version}:
This version especially aids the transition from Mill 0.10 to Mill 0.11.
mill.define.SelectMode.Single
mill.eval.Evaluator.evalOrThrow
Tests
traits of modules derived from JavaModule
and provide type aliases to use their successorsFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-12] === 0.10.12 - 2023-03-20 :version: 0.10.12 :milestone-name: 0.10.12 :milestone: 75 :prev-version: 0.10.11
Changes since {prev-version}:
scalalib
: Mitigate another coursier download issue (backported from 0.11.0-M4)testrunner
: Fixed a concurrency issue with test event reporting (backported from 0.11.0-M5)scalajslib
: Deprecated fastOpt
and fullOpt
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-11] === 0.10.11 - 2023-01-24 :version: 0.10.11 :milestone-name: 0.10.11 :milestone: 71 :prev-version: 0.10.10
Changes since {prev-version}:
clean
command when used with arguments denoting modules.scalalib
: Fixed GenIdea
issues on Windows, when the build uses plugins or additional libraries.scalajslib
: Performance improvements in worker modulescalajslib
: Pass more settings from ScalaJSModule
to its Tests
If you have issues after the update (like org.scalajs.jsenv.UnsupportedInputException
, https://github.com/com-lihaoyi/mill/issues/2300), check your settings in the test modules for consistency.
0.11.0-M3
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-10] === 0.10.10 - 2022-12-06 :version: 0.10.10 :prev-version: 0.10.9 :milestone: 69 :milestone-name: 0.10.10
After this release, the main
branch is open for development of the next major version of Mill, which is probably 0.11
.
Further maintenance work will happen in the 0.10.x
branch.
Changes since {prev-version}:
core
: Fixed some rare issues with reading the .mill-jvm-opts
filecore
: We made slight adaptions to the T.dest
location of target defined in included files, to fix potential colliding cache locationsscalalib
: JAR archives created by Mill now by default contain directory entriesscalalib
: Updated zinc to 1.8.0scalajslib
: Added support for more JsEnv
providersIf you get some issues (like connect ECONNREFUSED
, https://github.com/com-lihaoyi/mill/issues/2204) after the update, review your settings for JsEnv
providers.
scalanativelib
: Support for incremental compilation since Scala Native 0.4.9contrib.testng
: The TestNG library is no longer provided transitively; you need to provide it explicitlycontrib.bloop
: Fixed re-generation of bloop config dir; previously, it could happen, that there where no config files at allBSP
: implement buildTarget/OutputPaths
requestFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-9] === 0.10.9 - 2022-11-10 :version: 0.10.9 :prev-version: 0.10.8 :milestone: 68 :milestone-name: 0.10.9
Changes since {prev-version}:
mill-moduledefs
module into a {link-mill-moduledefs}[separate project], to better suite compiler plugin packaging and improve support for various Scala versionsGenIdea
(2.2 and 2.3)PublishModule
dropped module dependencies when mixed-in after other trait which overrode moduleDeps
JMH
contrib pluginFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-8] === 0.10.8 - 2022-10-10 :version: 0.10.8 :prev-version: 0.10.7 :milestone: 67 :milestone-name: 0.10.8
Changes since {prev-version}:
CoursierModule
: mitigate more download failure situations (e.g. checksum failures)PublishModule
: properly show gpg
output in server modeBSP
: Better compiler message handling (logMessage
instead of showMessage
) and support for diagnostic codeScoverageModule
: Support for Scoverage 2.xGitlabPublishModule
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-7] === 0.10.7 - 2022-08-24 :version: 0.10.7 :prev-version: 0.10.6 :milestone: 66 :milestone-name: 0.10.7
Changes since {prev-version}:
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-6] === 0.10.6 - 2022-08-24 :version: 0.10.6 :prev-version: 0.10.5 :milestone: 64 :milestone-name: 0.10.6
Changes since {prev-version}:
PathRef
s sigs are now more reproducible and independent of the used filesystemJavaModule
can now use a non-local Java Compiler to support all optionsLogger
: new debugEnabled
to detect whether debug logging is enabledtestkit
module, to use UnitTester
in external projects.mill-jvm-opts
in server modemill.twirllib.TwirlModule
- new mandatory target twirlScalaVersion
to configure the Scala version used by Twirl compiler, and support for newer versionsFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-5] === 0.10.5 - 2022-07-01 :version: 0.10.5 :prev-version: 0.10.4 :milestone: 63 :milestone-name: 0.10.5
Changes since {prev-version}:
New init
command, to create new Mill projects from Gitter8 (g8) templates
PathRef
now gracefully ignores socket files.
This also fixes an annoying issue when Mill was previously ran in a source directory.
Fixed a bug with using mill --repl
without any further arguments, which was introduced in Mill 0.10.2 and prevented proper no-server mode
Fixed the visualize
command which wasn't working on some newer JREs
Improved Mill server support for Windows 11 and some Windows Server versions
ScalaModule
/ ZincWorkerModule
: Fixed incremental compilation issue with JRE 17 (and probably others)
TestModule
now better supports JUnit5 test suites
ScalaJsModule
: internal improvements to the stability of the Scala.js linker
ScalaNativeModule
: Added support for nativeEmbedResources
BSP
: improved handling of the mill-build
module when the BSP client is IntelliJ IDEA
Documentation updates and link fixes
Various dependency updates
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-4] === 0.10.4 - 2022-05-06 :version: 0.10.4 :prev-version: 0.10.3 :milestone: 62 :milestone-name: 0.10.4
Changes since {prev-version}:
Switched from ipcsocket to junixsocket library to enhance the robustness of Mill client server communication. This should greatly improve the user experience on Windows.
Internal improvements and better support of GraalVM
The Mill Documentation site has now built-in search functionality
ScalaJsModule
: New targets fastLinkJS
and fullLinkJS
and deprecated fastOpt
and fullOpt
ScalaJsModule
: Support for ModuleSplitStyle
BSP
: Updated to protocol version 2.1.0-M1, added support for test framework names and support for the JVM extension
GenIdea
: More consistent ordering of libraries and dependent modules and support for Scala 3.1 language level
Bloop
: Added support for runtime dependencies
Enhanced test suite to cover Mill client server scenarios
Various dependency updates
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-3] === 0.10.3 - 2022-04-11 :version: 0.10.3 :prev-version: 0.10.2 :milestone: 61 :milestone-name: 0.10.3
Changes since {prev-version}:
Fixed import $file
for files with hyphens and other symbols in its name
Fixed an issues with truncated output just before Mill finishes
Mill commands now support arguments of type Task[T]
, which can improve writing re-usable commands, especially, they can be called from other tasks more easily
JavaModule
: Improved correctness and performance of compileClasspath
and bspCompileClasspath
targets.
This fixes an issue with BSP for large projects.
Also, compile-time dependencies no longer sneak into the classpath transitively.
JavaModule
: Added docJarUseArgsFile
target and fix issue with Windows command length restrictions in docJar
BSP
and Bloop
: Better detect foreign modules
Various internal API refinements and improvements
Reorganized integration test suite and build setup
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-2] === 0.10.2 - 2022-03-18 :version: 0.10.2 :prev-version: 0.10.1 :milestone: 60 :milestone-name: 0.10.2
Changes since {prev-version}:
AutoCloseable
to properly free resourcesScalaModule
: Fixed repl
startCoursierModule
: Fixed concurrent download issues with coursier (we detect and retry)MainModule
: Fixed potential match error with show
and showNamed
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-1] === 0.10.1 - 2022-03-08 :version: 0.10.1 :prev-version: 0.10.0 :milestone: 59 :milestone-name: 0.10.1
Changes since {prev-version}:
MillClienMain
can now act as universal main to start mill with or without a server process
Improved show
command that always returns valid JSON
Added showNamed
command that includes the task names in the output
Implemented more granular cache invalidation which keeps more caches intact when you split your build setup over multiple .sc
files with import $file
.
The local .mill-jvm-opts
file is no longer restricted to -X
options
CoursierModule
: Added coursierCacheCustomizer
to support a FileCache
customizers
JavaModule
: the docJar
target no longer includes hidden files
ScalaModule
: Updated to latest zinc version
ScalaModule
: Reworked scalac plugins handling for the better and to support Scala 3
ScalaNativeModule
: fixed Dep.withDottyCompat
behavior
ScalaJSModule
: support for linking multiple modules
ScalafmtModule
: Support for newer Scalafmt versions
Tool chain: Update to Mill 0.10.0
Tool chain: we no longer create files outside the mill project directory (e.g. ~/mill-release
is now under target/mill-release
)
Various dependency updates
Lots of internal improvements
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-0] === 0.10.0 - 2022-01-14 :version: 0.10.0 :prev-version: 0.10.0-M5 :milestone: 57 :milestone-name: 0.10.0
Changes since {prev-version}:
out
directory, out/foo/dest
is now out/foo.dest
--watch
now supports manual re-runs by pressing enterversionScheme
informationFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-0-M5] === 0.10.0-M5 - 2021-12-18 :version: main :prev-version: 0.10.0-M4 :milestone: 55 :milestone-name: 0.10.0-M5
This release breaks binary compatibility for external plugins.
Changes since {prev-version}:
ZincWorkerModule
(CVE-2021-44228)--watched
commands can now re-run when pressing enter-keyprepareOffline
now has a all
flag to control if all or only some dependency should be prefetchedFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-0-M4] === 0.10.0-M4 - 2021-11-08 :version: 0.10.0-M4 :prev-version: 0.10.0-M3 :milestone: 54 :milestone-name: 0.10.0-M4
Changes since {prev-version}:
+
separator to provide multiple targets (with parameters) via cmdline--import
cmdline option to run ad-hoc plugins without editing of build.sc
T.ctx().workspace
API to access the project root directoryFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-1-0-M3] === 0.10.0-M3 - 2021-09-29 :version: 0.10.0-M3 :prev-version: 0.10.0-M2 :milestone: 53 :milestone-name: 0.10.0-M3
This is a milestone release. This release breaks binary compatibility for external plugins build for mill 0.9.x. The API is suspected to change before a 0.10.0 releae.
Changes since {prev-version}:
ScalaModule with PublishModule
: the scala-library
artifact is now always part of the dependencies in published pom.xml
s and ivy.xml
sJavaModule.mandatoryIvyDeps
target to provide essential dependencies like scala-library without forcing the user to call super.ivyDeps
ScalaJSModule.scalaLibraryIvyDeps
no longer contains the scala-js-library, but only the scala-library; if you need that, use ScalaJSModule.mandatoryIvyDeps
instead.import $ivy
support $MILL_BIN_PLATFORM
variable and a new sort notations for external pluginsplan
or path
now also return their outputGenIdea
: improved support for Scala 3 projects *For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-10-0-M2] === 0.10.0-M2 - 2021-09-17 :version: 0.10.0-M2 :prev-version: 0.9.9 :milestone: 51 :milestone-name: 0.10.0-M2
This is a early milestone release. This release breaks binary compatibility for external plugins build for mill 0.9.x. The API is suspected to change before a 0.10.0 releae.
Changes since {prev-version}:
ScalaModule
: added mandatoryScalacOptions
to avoid the common issue that users forget to include mandatory options when defining their own.toolsClasspath
targets found in various modules to avoid hard to resolve clashes when mixing traitsFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-9-12] === 0.9.12 - 2022-01-07 :version: 0.9.12 :prev-version: 0.9.11 :milestone: 58 :milestone-name: 0.9.12
show
commandFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-9-11] === 0.9.11 - 2021-12-15 :version: 0.9.11 :prev-version: 0.9.10 :milestone: 56 :milestone-name: 0.9.11
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-9-10] === 0.9.10 - 2021-11-13 :version: 0.9.10 :prev-version: 0.9.9 :milestone: 52 :milestone-name: 0.9.10
+
separator to provide multiple targets (with parameters) via cmdline--import
cmdline option to run ad-hoc plugins without editing of build.sc
import $ivy
support $MILL_BIN_PLATFORM
variable and a new sort notations for external pluginsFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-9-9] === 0.9.9 - 2021-07-15 :version: 0.9.9 :prev-version: 0.9.8 :milestone: 50 :milestone-name: 0.9.9
Changes since {prev-version}:
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-9-8] === 0.9.8 - 2021-05-27 :version: 0.9.8 :prev-version: 0.9.7 :milestone: 49 :milestone-name: 0.9.8
Changes since {prev-version}:
assembly
, esp. on Windows where open resources are locked.idea/mill_modules
For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-9-7] === 0.9.7 - 2021-05-14 :version: 0.9.7 :prev-version: 0.9.6 :milestone: 48 :milestone-name: 0.9.7
Changes since {prev-version}:
ScalaModule
: Support for Scala 3CoursierModule
: Support customized dependency resolution (needed to work with ScalaFX)TestModule
: Added new testFramework
target and only support one test framework.testFrameworks
targets.TestModule
: Added new convenience traits to configure popular test frameworks, e.g. TestModule.Junit4
, TestModule.ScalaTest
, TestModule.Utest
and many moreBloop
: Added support for foreign modulesFor details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].
[#0-9-6] === 0.9.6 - 2021-04-03
The mill project home and repository has been moved to https://github.com/com-lihaoyi/mill.
repl
and console
targets now support forkArgs
and forkEnv
For details refer to {link-milestone}/47?closed=1[milestone 0.9.6] and the {link-compare}/0.9.5...0.9.6[list of commits].
[#0-9-5] === 0.9.5 - 2021-01-26
Tests
traits in modules like JavaModule
, ScalaModule
and others now have unique names (JavaModuleTests
, ScalaTests
, etc), to allow for easier customizationFor details refer to {link-milestone}/46?closed=1[milestone 0.9.5] and the link:{link-compare}/0.9.4...0.9.5[list of commits].
[#0-9-4] === 0.9.4 - 2020-12-21
For details refer to {link-milestone}/45?closed=1[milestone 0.9.4] and the {link-compare}/0.9.3...0.9.4[list of commits].
[#0-9-3] === 0.9.3 - 2020-11-26
(We also tagged 0.9.0
, 0.9.1
, and 0.9.2
, but due to release difficulties, we ask you not to use them.)
@main
method functionality with the-i
can no longer be passed via --i
, the @doc("")
is now @arg(doc = "")
, Seq[T]
parameters are now passed via repeated --foo
.assembly
{link-pr}/947[#947]scalacPluginClasspath
to Tests {link-pr}/956[#956]toMap
methods to BuildInfo
{link-pr}/958[#958]artifactName
in cross modules {link-pr}/953[#953]For details refer to {link-milestone}/44?closed=1[milestone 0.9.3] and the {link-compare}/0.8.0...0.9.3[list of commits].
[#0-8-0] === 0.8.0 - 2020-07-20
For details refer to {link-milestone}/43?closed=1[milestone 0.8.0] and the {link-compare}/0.7.4...0.8.0[list of commits].
[#0-7-4] === 0.7.4 - 2020-07-03
--repl
and --no-server
, deprecated --interactive
optionFor details refer to {link-milestone}/42?closed=1[milestone 0.7.4] and the {link-compare}/0.7.3...0.7.4[list of commits].
[#0-7-3] === 0.7.3
For details refer to {link-milestone}/41?closed=1[milestone 0.7.3] and the {link-compare}/0.7.2...0.7.3[list of commits].
[#0-7-2] === 0.7.2 - 2020-05-19
For details refer to {link-milestone}/40?closed=1[milestone 0.7.2] and the {link-compare}/0.7.1...0.7.2[list of commits].
[#0-7-1] === 0.7.1 - 2020-05-17
For details refer to {link-milestone}/39?closed=1[milestone 0.7.1] and the {link-compare}/0.7.0...0.7.1[list of commits].
[#0-7-0] === 0.7.0 - 2020-05-15
-j <n>
/--jobs <n>
, with better scheduling and utilization of multiple coresbuild.sc
files now uses Scala 2.13.2mill resolve __
--gpgArgs
-w
/--watch
now works for Task.Source
targetsFor details refer to {link-milestone}/37?closed=1[milestone 0.7.0] and the {link-compare}/0.6.3...0.7.0[list of commits].
[#0-6-3] === 0.6.3 - 2020-05-10
publishLocal
)GenIdea
: improvements for shared source dirs and skipped modulesScoverageModule
: Some refactorings to allow better customizationFor details refer to {link-milestone}/38?closed=1[milestone 0.6.3] and the {link-compare}/0.6.2...0.6.3[list of commits].
[#0-6-2] === 0.6.2 - 2020-04-22
--jobs <n>
option.PublishModule
: new publishM2Local
to publish into local Maven repositoriesPublishModule
: enhanced publishLocal
to specify to ivy repository locationScalaNativeModule
: improved compiling and linking supportVersionFile
Dependency
: improved dependency update checker and expose results for programmatic useBintray
Artifactory
GenIdea
: improvements, esp. related to source jarsFor details refer to {link-milestone}/36?closed=1[milestone 0.6.2] and the {link-compare}/0.6.1...0.6.2[list of commits].
[#0-6-1] === 0.6.1 - 2020-02-24
--version
optionJavaModule
: Enhanced ivyDepsTree
to optionally include compile-time and runtime-time dependenciesJavaModule
: allSourceFiles
no longer include Scala sourcesJavaModule
: assembly supports configurable separator when merging resourcesScoverageModule
: respect unmanagedClasspath
, added console reporterScalaPBModule
: added more configuration options-Duser.dir
when generating bloop config)For details refer to {link-milestone}/35?closed=1[milestone 0.6.1] and the {link-compare}/0.6.0...0.6.1[list of commits].
[#0-6-0] === 0.6.0 - 2020-01-20
For details refer to {link-milestone}/34?closed=1[milestone 0.6.0] and the {link-compare}/0.5.9...0.6.0[list of commits].
[#0-5-9] === 0.5.9 - 2020-01-14
T.ctx.*
functions to T.*
: T.dest
, T.log
, etc.For details refer to the {link-compare}/0.5.7...0.5.9[list of commits].
Version 0.5.8 has some binary compatibility issues in requests-scala/geny and should not be used.
=== 0.5.7 - 2019-12-28
For details refer to {link-milestone}/33?closed=1[milestone 0.5.7] and the {link-compare}/0.5.5...0.5.7[list of commits].
[#0-5-6] [#0-5-5] === 0.5.5 / 0.5.6 - 2019-12-20
(we skipped version 0.5.4 as we had some publishing issues)
-i
option was used.PublishModule
: added ability to publish into non-staging repositoriesScalaPBModule
: added extra include path optionFor details refer to {link-milestone}/32?closed=1[milestone 0.5.5] and the {link-compare}/0.5.3...0.5.5[list of commits].
[#0-5-3] === 0.5.3 - 2019-12-07
GenIdea/idea
: improved support for generated sources and use/download sources in more casesCoursierModule
to use dependency management independent from a compilerScoverageModule
: better handling of report directoriesScalaPBModule
: more configuration optionsFor details refer to {link-milestone}/31?closed=1[milestone 0.5.3] and the {link-compare}/0.5.2...0.5.3[list of commits].
[#0-5-2] === 0.5.2 - 2019-10-17
TestModule
: new testCached
target, which only re-runs tests after relevant changesTestModule.test
: fixed issue when stacktraces have no filename infoDependency/updates
: fixed issue with reading stale dependenciesGenIdea/idea
: no longer shared output directories between mill and IntelliJ IDEAFor details refer to {link-milestone}/30?closed=1[milestone 0.5.2] and the {link-compare}/0.5.1...0.5.2[list of commits].
[#0-5-1] === 0.5.1 - 2019-09-05
$MILL_VERSION
in ivy importsFor details refer to {link-milestone}/29?closed=1[milestone 0.5.1] and the {link-compare}/0.5.0...0.5.1[list of commits].
[#0-5-0] === 0.5.0 - 2019-08-08
Mill now supports a ./mill
{link-current-doc-site}/#bootstrap-scripts-linuxos-x-only[bootstrap script], allowing a project to pin the version of Mill it requires, as well as letting contributors use ./mill ...
to begin development without needing to install Mill beforehand.
Support for a .mill-version
file or MILL_VERSION
environment variable for
{link-current-doc-site}/#overriding-mill-versions[Overriding Mill Versions]
Fix scoverage: inherit repositories from outer project {link-pr}/645[#645]
[#0-4-2] === 0.4.2 - 2019-06-30
Improvements to IntelliJ project generation {link-pr}/616[#616]
Allow configuration of Scala.js' JsEnv {link-pr}/628[#628]
[#0-4-1] === 0.4.1 - 2019-06-13
Fixes for scala native test suites without test frameworks {link-issue}/627[#627]
Fix publication of artifacts by increasing sonatype timeouts
Bug fixes for Scoverage integration {link-issue}/623[#623]
[#0-4-0] === 0.4.0 - 2019-05-20
Publish compileIvyDeps
as provided scope ({link-issue}/535[535])
Added contrib modules to integrate {link-current-doc-site}/page/contrib-modules.html#bloop[Bloop], {link-current-doc-site}/page/contrib-modules.html#flyway[Flyway], {link-current-doc-site}/page/contrib-modules.html#play-framework[Play Framework], {link-current-doc-site}/page/contrib-modules.html#scoverage[Scoverage]
Allow configuration of GPG key names when publishing ({link-pr}/530[530])
Bump Ammonite version to 1.6.7, making
https://github.com/lihaoyi/requests-scala[Requests-Scala] available to use in your build.sc
Support for Scala 2.13.0-RC2
ScalaFmt support now uses the version specified in .scalafmt.conf
[#0-3-6] === 0.3.6 - 2019-01-17
Started to splitting out mill.api from mill.core
Avoid unnecessary dependency downloading by providing fetches per cache policy
Added detailed dependency download progress to the progress ticker
Fixed internal code generator to support large projects
Zinc worker: compiler bridge can be either pre-compiled or on-demand-compiled
Zinc worker: configurable scala library/compiler jar discovery
Zinc worker: configurable compiler cache supporting parallelism
Version bumps: ammonite 1.6.0, scala 2.12.8, zinc 1.2.5
Mill now by default fails fast, so in case a build tasks fails, it exits immediately
Added new -k
/--keep-going
commandline option to disable fail fast behaviour and continue build as long as possible in case of a failure
[#0-3-5] === 0.3.5 - 2018-11-18
[#0-3-4] === 0.3.4 - 2018-11-06
[#0-3-3] === 0.3.3 - 2018-11-02
Added new debug
method to context logger, to log additional debug info into the task specific output dir (out/<task>/log
)
Added --debug
option to enable debug output to STDERR
Fix ScalaModule#docJar
task when Scala minor versions differ {link-issue}/475[475]
[#0-3-2] === 0.3.2 - 2018-10-19
ScalaModule#assembly
self-executable[#0-3-0] === 0.3.0 - 2018-10-19
Bump Ammonite to 1.3.2, Fastparse to 2.0.4
Sped up ScalaModule#docJar
task by about 10x, greatly speeding up publishing
Add a flag JavaModule#skipIdea
you can override to disable Intellij project generation {link-pr}/458[#458]
Allow sub-domains when publishing {link-pr}/441[#441]
[#0-2-8] === 0.2.8 - 2018-09-21
mill inspect
now displays out the doc-comment documentation for a task.
Avoid shutdown hook failures in tests {link-pr}/422[#422]
Ignore unreadable output files rather than crashing {link-pr}/423[#423]
Don't compile hidden files {link-pr}/428[#428]
[#0-2-7] === 0.2.7 - 2018-08-27
Add visualizePlan
command
Basic build-info plugin in mill-contrib-buildinfo
ScalaPB integration in mill-contrib-scalapblib
Fixes for Twirl support, now in mill-contrib-twirllib
Support for building Dotty projects {link-pr}/397[#397]
Allow customization of run
/runBackground
working directory via
forkWorkingDir
Reduced executable size, improved incremental compilation in {link-pr}/414[#414]
[#0-2-6] === 0.2.6 - 2018-07-30
Improve incremental compilation to work with transitive module dependencies
Speed up hot compilation performance by properly re-using classloaders
Speed up compilation time of build.sc
files by removing duplicate macro generated routing code
[#0-2-5] === 0.2.5 - 2018-07-22
Add .runBackground
and .runMainBackground
commands, to run something in the background without waiting for it to return.
The process will keep running until it exits normally, or until the same .runBackground
command is run a second time to spawn a new version of the process.
Can be used with -w
for auto-reloading of long-running servers.
{link-current-doc-site}/page/common-project-layouts.html#scala-native-modules[Scala-Native support]. Try it out!
Add --disable-ticker
to reduce spam in CI
Fix propagation of --color
flag
[#0-2-4] === 0.2.4 - 2018-07-07
Fix resolution of scala-{library,compiler,reflect}
in case of conflict
Allow configuration of JavaModule
and ScalafmtModule
scala workers
Allow hyphens in module and task names
Fix publishing of ScalaJS modules to properly handle upstream ScalaJS dependencies
[#0-2-3] === 0.2.3 - 2018-06-03
Added the {link-current-doc-site}/#visualize[mill visualize] command, making it easy to visualize the relationships between various tasks and modules in your Mill build.
Improve Intellij support ({link-pr}/351[351]):
better jump-to-definition for third-party libraries, no longer stomping over manual configuration, and better handling of import $ivy
in your build file.
Support for un-signed publishing and cases where your GPG key has no passphrase ({link-pr}/346[346])
Basic support for Twirl, Play Framework's templating language ({link-pr}/271[271])
Better performance for streaming large amounts of stdout from Mill's daemon process.
Allow configuration of append/exclude rules in ScalaModule#assembly
({link-pr}/309[309])
[#0-2-2] === 0.2.2 - 2018-05-20
Preserve caches when transitioning between -i
/--interactive
and the fast client/server mode ({link-issue}/329[329])
Keep Mill daemon running if you Ctrl-C during -w
/--watch
mode ({link-issue}/327[327])
Allow mill version
to run without a build file ({link-issue}/328[328])
Make docJar
(and thus publishing) robust against scratch files in the source directories ({link-issue}/334[334]) and work with Scala compiler options ({link-issue}/336[336])
Allow passing Ammonite command-line options to the foo.repl
command ({link-pr}/333[333])
Add mill clean
({link-pr}/315[315]) to easily delete the Mill build caches for specific targets
Improve IntelliJ integration of MavenModule
s/SbtModule
s' test folders ({link-pr}/298[298])
Avoid showing useless stack traces when foo.test
result-reporting fails or
foo.run
fails
ScalaFmt support ({link-pr}/308[308])
Allow ScalaModule#generatedSources
to allow single files (previous you could only pass in directories)
[#0-2-0] === 0.2.0 - 2018-04-10
Universal (combined batch/sh) script generation for launcher, assembly, and release ({link-issue}/264[#264])
Windows client/server improvements ({link-issue}/262[#262])
Windows repl support (note: MSYS2 subsystem/shell will be supported when jline3 v3.6.3 is released)
Fixed Java 9 support
Remove need for running publishAll
using --interactive
when on OSX and your GPG key has a passphrase
First-class support for JavaModule
s
Properly pass compiler plugins to Scaladoc ({link-issue}/282[#282])
Support for ivy version-pinning via ivy"...".forceVersion()
Support for ivy excludes via ivy"...".exclude()
({link-pr}/254[#254])
Make ivyDepsTree
properly handle transitive dependencies ({link-issue}/226[#226])
Fix handling of runtime
-scoped ivy dependencies ({link-issue}/173[#173])
Make environment variables available to Mill builds ({link-issue}/257[#257])
Support ScalaCheck test runner ({link-issue}/286[#286])
Support for using Typelevel Scala ({link-issue}/275[#275])
If a module depends on multiple submodules with different versions of an ivy dependency, only one version is resolved ({link-issue}/273[#273])
[#0-1-7] === 0.1.7 - 2018-03-26
Support for non-interactive (client/server) mode on Windows.
More fixes for Java 9
Bumped the Mill daemon timeout from 1 minute to 5 minutes of inactivity before it shuts down.
Avoid leaking Node.js subprocesses when running ScalaJSModule
tests
Passing command-line arguments with spaces in them to tests no longer parses wrongly
ScalaModule#repositories
, scalacPluginIvyDeps
, scalacOptions
,
javacOptions
are now automatically propagated to Tests
modules
ScalaJSModule
linking errors no longer show a useless stack trace
ScalaModule#docJar
now properly uses the compileClasspath rather than runClasspath
Bumped underlying Ammonite version to http://ammonite.io/#1.1.0[1.1.0], which provides the improved Windows and Java 9 support
[0-1-6] === 0.1.6 - 2018-03-13
Fixes for non-interactive (client/server) mode on Java 9
Windows batch (.bat) generation for launcher, assembly, and release
[#0-1-5] === 0.1.5 - 2018-03-13
Introduced the mill plan foo.bar
command, which shows you what the execution plan of running the foo.bar
task looks like without actually evaluating it.
Mill now generates an out/mill-profile.json
file containing task-timings, to make it easier to see where your mill evaluation time is going
Introduced ScalaModule#ivyDepsTree
command to show dependencies tree
Rename describe
to inspect
for consistency with SBT
mill resolve
now prints results sorted alphabetically
Node.js configuration can be customised with ScalaJSModule#nodeJSConfig
Scala.js fullOpt
now uses Google Closure Compiler after generating the optimized Javascript output
Scala.js now supports NoModule
and CommonJSModule
module kinds
Include compileIvyDeps
when generating IntelliJ projects
Fixed invalid POM generation
Support for Java 9 (and 10)
Fixes for Windows support
Fixed test classes discovery by skipping interfaces
Include "optional" artifacts in dependency resolution if they exist
out/{module_name}
now added as a content root in generated IntelliJ project
[#0-1-4] === 0.1.4 - 2018-03-04
Speed up Mill client initialization by another 50-100ms
Speed up incremental assembly
s in the common case where upstream dependencies do not change.
Make ScalaJSModule#run
work with main-method discovery
Make ScalaWorkerModule
user-defineable, so you can use your own custom coursier resolvers when resolving Mill's own jars
Simplify definitions of SCM
strings
Make the build REPL explicitly require -i
/--interactive
to run
Log a message when Mill is initializing the Zinc compiler interface
[#0-1-3] === 0.1.3 - 2018-02-26
Greatly reduced the overhead of evaluating Mill tasks, with a warm already-cached mill dev.launcher
now taking ~450ms instead of ~1000ms
Mill now saves compiled build files in ~/.mill/ammonite
, which is configurable via the --home
CLI arg.
Fixed linking of multi-module Scala.js projects
[#0-1-2] === 0.1.2 - 2018-02-25
Mill now keeps a long-lived work-daemon around in between commands; this should improve performance of things like compile
which benefit from the warm JVM.
You can use -i
/--interactive
for interactive consoles/REPLs and for running commands without the daemon
Implemented the ScalaModule#launcher
target for easily creating command-line launchers you can run outside of Mill
ScalaModule#docJar
no longer fails if you don't have scala-compiler
on classpath
Support for multiple testFrameworks
in a test module.
[#0-1-1] === 0.1.1 - 2018-02-19
foo.console
foo.repl
[#0-1-0] === 0.1.0 - 2018-02-18
// end::changelogOld[]