- Add
runEnvironment
key to control environment variables - Remove
runMain
andrun
dry parameter, addrunProcess
instead - Improve machine readable output ergonomics
- Option now also has a short name
- SHELL format now supports propagating exit code
run
task returnsExitCode
object implementingWithExitCode
- The big flattening: Removed
Keys
,Configurations
andArchetypes
objects. Their content is now in top level variables in respective packages (wemi.keys.run
for example). This should help with wildcard importing. - Added a concept of user defined commands, which work similarly to keys, but have a fixed binding and can be only invoked in the top level
- Input parameters are now applicable only to commands, not to key bindings
- In plugin for intellij plugins: Added ability to instrument classes with not-null assertions and to compile .form files
- JUnit test dependencies are added in
testing:
again - Add ability to machine-readable-print more types, namely
Pair
,DokkaOptions
,TestReport
,TestParameters
andInfoNode
- Update JLine to 3.18.0, this should help with color codes on Windows
- Force hotfix: SimpleHistory did not implement some new methods from JLine
- Housekeeping update
- Generated sources are now in
/build-generated/
to prevent IDE conflicts - Changed what can be extended and what can extend (
ConfigurationExtension
s can no longer extend, but everything else can be extended, including projects and archetypes) - Removed
Keys.javaExecutable
, the information is now carried inKeys.javaHome
- Added IntelliJ Plugin Verifier support to intellij ide plugin
- Do not upgrade to this version
- Fix aggregate project's test attempting to test untestable subprojects
- Improved
java
detection on macOS - Initial and work-in-progress support for Kotlin JavaScript backend and TeaVM
- Internal robustness improvements in handling broken dependencies and Maven version ranges
- Add
runSystemProperties
key for easier handling of Java's system properties. The properties are included intorunOptions
by default. - Having multiple keys with the same name should no longer completely break the build
- Maven dependency resolver now checks
WEMI_MAVEN_OS_NAME
,WEMI_MAVEN_OS_ARCH
,WEMI_MAVEN_OS_VERSION
andWEMI_MAVEN_OS_FAMILY
environment variables to detect relevant profile activation properties - Added a new
Dependency
type,TypeChooseByPackaging
, which allows Wemi to choose the artifact automatically - Added
SystemInfo
for all operating system and processor architecture detection needs - Removed
archivingDocs
andarchivingSources
configurations, their purpose is now fulfilled througharchiveDocs
andarchiveSources
keys - Removed
archiveOutput
key, modify the target file location through explicit move - Removed
publishing
configuration - Added
testSources
andtestResources
to simplify setting of these properties - Generated files are now stored in a separate directory in ./build/generated
- Configurations can no longer have parents
- Removed resolvedLibraryScopes and the significance of compiling/running/archiving/etc. configurations in favor of dedicated scopesCompile, scopesRun and scopesTest keys along with scoping information directly inside externalClasspath
- Introduced aggregate scope to implement aggregate project dependency more cleanly
- Removed
running
,compiling
,assembling
andarchiving
configurations, they are not necessary anymore - Removed
retrievingSources
andretrievingDocs
configurations, use new keysexternalSources
andexternalDocs
instead
- Add utility functions for source file and classpath generation, see the
wemi.generation
package - Fix
system
crashing on infinite timeout - Fix
--machine-readable=shell
stack overflow onPath
printing and make it robust against self-referential collections - Improve symlink handling in launcher (fixes issues on Windows, in particular)
- Fix non-deterministic dependency resolution when a dependency was present multiple times with different versions
- Add support for Kotlin 1.3.61
- Add
system
function, for easy system command invocation - Greatly improved and sped-up dependency resolution process, up to 33% faster than previous version
- Downloading of multiple dependencies is now parallelized
- Much better error messages
- Added support for Maven's POM
<profile>
s
- Fix testing harness classes often conflicting with user libraries
- Add
--machine-readable=shell
mode, for better shell scripting integration - Improve
javac
logging reliability - Cache downloaded dependencies in
~/.wemi
, instead of~/.m2
- Do not consider aborted tests as failures
- Add explicit
JavaCompilerFlag.encoding
, which defaults to UTF-8 - Fix archiving not using correct configurations
- Prevent Javadoc from failing on soft errors. To fail the task on soft errors, add javadoc flag
-Wemi-fail-on-error
- JUnit dependencies are now bundled by default, you don't have to add them manually
- They are hidden in
testing
configuration
- They are hidden in
- Better resource handling in aggregate archetype
compilingJava
andcompilingKotlin
configurations are gone. Compiler flags can be set directly.- Configuration hierarchies now form configuration axis which are mutualy exclusive
- Exit on first error when running non-interactively
- Ability to limit amount of printed collection elements, example:
trace elements=5 compile
- Bug fixes
- New distribution scheme - launcher is now a shell script, not a fat-jar
- It is possible to specify scope for
ProjectDependency
- Rename
BlankJVMProject
toAggregateJVMProject
- Rename
libraryDependencyProjectMapper
tolibraryDependencyMapper
- Minor improvements
- Improve Maven dependency resolution system
- Handles transitive dependencies, dependencyManagement, exclusions and scopes in the same way as Maven itself does
- Attempts to properly detect multiple repositories which host same artifact and warns if their content differs
DependencyId.scope
now works as expected, it is no longer just a dummy value- Previous approach of setting "scope" indirectly through
using(compiling/running/testing)
is still supported
- Previous approach of setting "scope" indirectly through
- Default project can now be set directly in the build script, through
Project.makeDefault()
- Progress for long running dependency downloads is now shown, along with download speed and ETA
run
key now supportsdry=true
input to just print the command used to run the program- HTTPS security can now be relaxed on a per-repo basis. This is inherently unsafe, so it is accompanied by a healthy dose of warnings.
- Remove old Kotlin versions (1.2.21 and 1.2.41) and add latest one instead (1.3.41)
- CLI:
X/
whereX
is a project name is now an alias forproject X
, for switching session's default project - Internal: Directory locking is now more reliable
- Deprecate some utility methods in favor of using constructors directly (
FileSet
,dependency
for project dependencies)import wemi.*
is now assumed to be present in build scripts for more fluent api
- When running through
run
key, SIGINT is forwarded to the running program - Make
FileSet
more expressive - Refactored and partially rewritten Maven dependency resolution and related classes
- nicer API
- support
-SNAPSHOT
versions - more control over checksum mismatches
Key.add
and similar extension methods no longer incorrectly allow arbitrary types to be added- Fix
--log=<level>
startup parameter - Improve
Path
andURL
div
extension operators to handle.
and..
paths correctly and be more intuitive in general
- Replaced
(re)sourceRoots
,sourceExtensions
and(re)sourceFiles
with single(re)sources
key, powered byFileSet
class (inspired by Ant's<fileSet>
) - Add new key value caching system (see
EvalScope
) - Remove anonymous configurations
- When evaluating keys, current evaluation stack is displayed in the CLI
- Input system rewritten
- It is now possible to specify pattern to filter which test should run in
test
- Change how Wemi is bundled and launched internally, which should improve IDE behavior
- Many bug fixes and robustness improvements
- IDE: File paths are now clickable
- Fix kotlin 1.2.71 incremental compilation
- Add "key trace" status line to the UI
- IDE: Add "convert to Wemi" action
- IDE: Add "(re)install Wemi launcher" action
- IDE: Show what is Wemi doing during import (which task is running)
- Add support for Kotlin 1.2.71
- Fix
resourceRoots
not being set according toprojectRoot
- Fix Maven dependency resolution not considering parent poms
- Initial import into IntelliJ will succeed even when build scripts are broken
- Rewritten how internal cache system works
- Now caching is explicit
- Add hotswap plugin
- Add support for Kotlin 1.2.41
- Remove support for Kotlin 1.1.3-4 and 1.2.20
- Add
Lines
andUniqueLines
MergeStrategy - Add
assemblyMapFilter
key for more fine-grained control over assembled files - Improve
keys
,configurations
andprojects
commands by adding a filter parameter to them - Add
inspect
command for checking detailed information about keys, including where it is bound, configurations and projects - Fix launcher script to be valid bash by requiring bash instead of sh
- Internal refactorings, some mildly breaking to build scripts
- WCollections no longer needed, used only internally
- Build script is now exposed as project, not configuration
- Build script directives are now annotation based, instead of line command based
- Harden key binding resolution and fix result caching by simplifying it
- Importing to IDE is now possible even with no/broken build scripts
- Partial support of of Maven poms
- Buildable using jitpack.io (see jitpack.yml for use in your own projects)
- Change CLI options to follow GNU standard, including long/short options and
--help
/--version
convention. Old Java-style options are no longer supported. - Allow to debug
run
andtest
tasks with newdebug:
configuration - Improve JUnit test reports (mostly with colors)
- Add explicit color/unicode toggles, to be more bad-OS friendly
- Disallow the
.wemi
build script extension, as it only added complexity and broke things. Use.kt
instead. - New API for artifact customization
DependenciesOnly
archetype is now replaced byBlankJVMProject
- Many fixes for Windows, that made the core more robust
- Support
reload
command to reload build scripts, ask to reload when scripts fail to compile on startup - Improved dependency resolution
- Show file sizes in task results
- Unified Kotlin and Java compiler error reports
- Initial support for Kotlin's incremental compilation
- New
dependency()
DSL overloads for specifying preferred repository - Change signature of
Project.dependency(Configuration*)
todependency(Project, aggreagate:Boolean, Configuration*)
for better consistency and less conflicts. Adds explicit (non)aggregate functionality. - Remove
startYear
key, usepublishMetadata.inceptionYear
instead