mirror of https://github.com/sbt/sbt.git
Merge notes
This commit is contained in:
parent
58f90cd078
commit
a9c41a19cd
|
|
@ -7,17 +7,30 @@
|
|||
[@dwickern]: https://github.com/dwickern
|
||||
[@kretes]: https://github.com/kretes
|
||||
[@j-keck]: https://github.com/j-keck
|
||||
|
||||
[SI-9027]: https://issues.scala-lang.org/browse/SI-9027
|
||||
[Custom-Settings0]: http://www.scala-sbt.org/0.13/tutorial/Custom-Settings.html
|
||||
[647]: https://github.com/sbt/sbt/issues/647
|
||||
[679]: https://github.com/sbt/sbt/issues/679
|
||||
[875]: https://github.com/sbt/sbt/issues/875
|
||||
[1001]: https://github.com/sbt/sbt/issues/1001
|
||||
[1180]: https://github.com/sbt/sbt/issues/1180
|
||||
[1322]: https://github.com/sbt/sbt/issues/1322
|
||||
[1542]: https://github.com/sbt/sbt/issues/1542
|
||||
[1615]: https://github.com/sbt/sbt/issues/1615
|
||||
[1616]: https://github.com/sbt/sbt/issues/1616
|
||||
[1634]: https://github.com/sbt/sbt/pull/1634
|
||||
[1676]: https://github.com/sbt/sbt/issues/1676
|
||||
[1702]: https://github.com/sbt/sbt/pull/1702
|
||||
[1714]: https://github.com/sbt/sbt/issues/1714
|
||||
[1738]: https://github.com/sbt/sbt/issues/1738
|
||||
[1741]: https://github.com/sbt/sbt/pull/1741
|
||||
[1746]: https://github.com/sbt/sbt/pull/1746
|
||||
[1748]: https://github.com/sbt/sbt/issues/1748
|
||||
[1752]: https://github.com/sbt/sbt/pull/1752
|
||||
[1766]: https://github.com/sbt/sbt/pull/1766
|
||||
[1771]: https://github.com/sbt/sbt/pull/1771
|
||||
[SI-9027]: https://issues.scala-lang.org/browse/SI-9027
|
||||
[1793]: https://github.com/sbt/sbt/pull/1793
|
||||
[1817]: https://github.com/sbt/sbt/pull/1817
|
||||
|
||||
### Fixes with compatibility implications
|
||||
|
||||
|
|
@ -25,9 +38,12 @@
|
|||
|
||||
### Improvements
|
||||
|
||||
- Adds Maven resolver plugin. See below. [#1793][1793] by [@jsuereth][@jsuereth]
|
||||
- Adds project-level dependency exclusions. See below. [#1748][1748] by [@eed3si9n][@eed3si9n]
|
||||
- Adds sequential tasks. See below. [#1817][1817]/[#1001][1001] by [@eed3si9n][@eed3si9n]
|
||||
- Discovered main classes will be sorted. [#1180][1180] by [@kretes][@kretes]
|
||||
- Implemented a new mechanism of forking javac, whereby errors are captured. Also more likely to run in-process. [#1702][1702] by [@jsuereth][@jsuereth]
|
||||
- Adds project-level dependency exclusions. See below.
|
||||
- `evicted` will display all evictions (including the ones not suspected of binary incompatibility). [#1615][1615] by [@eed3si9n][@eed3si9n]
|
||||
|
||||
### Fixes
|
||||
|
||||
|
|
@ -36,6 +52,14 @@
|
|||
- Ignores hidden build files from the build. [#1746][1746] by [@j-keck][@j-keck]
|
||||
- Fixes build.sbt parsing of multiple import. [#1741][1741] by [@ajozwik][@ajozwik]
|
||||
- Fixes ANSI escape code for overwriting lines on Windows. [#1771][1771] by [@dwickern][@dwickern]
|
||||
- sbt doesn't honor Maven's uniqueVersions (use sbt-maven-resolver to fix). [#1322][1322] by [@jsuereth][@jsuereth]
|
||||
- sbt doesn't see new SNAPSHOT dependency versions in local maven repos (use withLatestSnapshots + sbt-maven-resolver to fix) [#321][321] by [@jsuereth][@jsuereth]
|
||||
- Property in pom's version field results to wrong dependency resolution (use sbt-maven-resolver to fix). [#647][647] by [@jsuereth][@jsuereth]
|
||||
- Maven local resolver with parent POM (use sbt-maven-resolver). [#1616][1616] by [@jsuereth][@jsuereth]
|
||||
- Fixes cached resolution being too verbose. [#1752][1752] by [@eed3si9n][@eed3si9n]
|
||||
- Fixes eviction warning being too noisy. [#1615][1615] by [@eed3si9n][@eed3si9n]
|
||||
- Issues warning if multiple dependencies to a same library is found with different version. [#1634][1634] by [@eed3si9n][@eed3si9n]
|
||||
- Removes "No main class detected" warning. [#1766][1766] by [@eed3si9n][@eed3si9n]
|
||||
|
||||
### Rolling back XML parsing workaround
|
||||
|
||||
|
|
@ -51,6 +75,31 @@ At the time, we thought adding parentheses around XML nodes could work around th
|
|||
|
||||
[#1765][1765] by [@ajozwik][@ajozwik]
|
||||
|
||||
### Maven resolver plugin
|
||||
|
||||
sbt 0.13.8 adds an extension point in the dependency resolution to customize Maven resolvers.
|
||||
This allows us to write sbt-maven-resolver auto plugin, which internally uses Eclipse Aether
|
||||
to resolve Maven dependencies instead of Apache Ivy.
|
||||
|
||||
To enable this plugin, add the following to `project/maven.sbt` (or `project/plugin.sbt` the file name doesn't matter):
|
||||
|
||||
libraryDependencies += Defaults.sbtPluginExtra("org.scala-sbt" % "sbt-maven-resolver" % sbtVersion.value,
|
||||
sbtBinaryVersion.value, scalaBinaryVersion.value)
|
||||
|
||||
This will create a new `~/.ivy2/maven-cache` directory, which contains the Aether cache of files.
|
||||
You may notice some file will be re-downloaded for the new cache layout.
|
||||
Additionally, sbt will now be able to fully construct
|
||||
`maven-metadata.xml` files when publishing to remote repositories or when publishing to the local `~/.m2/repository`.
|
||||
This should help erase many of the deficiencies encountered when using Maven and sbt together.
|
||||
|
||||
**Notes and known limitations**:
|
||||
|
||||
- sbt-maven-resolver requires sbt 0.13.8 and above.
|
||||
- The current implementation does not support Ivy-style dynamic revisions, such as "2.10.+" or "latest.snapshot". This
|
||||
is a fixable situation, but the version range query and Ivy -> Maven version range translation code has not been migrated.
|
||||
|
||||
[#1793][1793] by [@jsuereth][@jsuereth]
|
||||
|
||||
### Project-level dependency exclusions
|
||||
|
||||
sbt 0.13.8 adds project-level dependency exclusions:
|
||||
|
|
@ -60,3 +109,57 @@ sbt 0.13.8 adds project-level dependency exclusions:
|
|||
|
||||
In the first example, all artifacts from the organization `"org.apache.logging.log4j"` are excluded from the managed dependency.
|
||||
In the second example, artifacts with the organization `"com.example"` and the name `"foo"` cross versioned to the current `scalaVersion` are excluded. [#1748][1748] by [@eed3si9n][@eed3si9n]
|
||||
|
||||
### Sequential tasks
|
||||
|
||||
sbt 0.13.8 adds a new `Def.sequential` function to run tasks under semi-sequential semantics.
|
||||
Here's an example usage:
|
||||
|
||||
lazy val root = project.
|
||||
settings(
|
||||
testFile := target.value / "test.txt",
|
||||
sideEffect0 := {
|
||||
val t = testFile.value
|
||||
IO.append(t, "0")
|
||||
t
|
||||
},
|
||||
sideEffect1 := {
|
||||
val t = testFile.value
|
||||
IO.append(t, "1")
|
||||
t
|
||||
},
|
||||
foo := Def.sequential(compile in Compile, sideEffect0, sideEffect1, test in Test).value
|
||||
)
|
||||
|
||||
Normally sbt's task engine will reorder tasks based on the dependencies among the tasks,
|
||||
and run as many tasks in parallel (See [Custom settings and tasks][Custom-Settings0] for more details on this).
|
||||
`Def.sequential` instead tries to run the tasks in the specified order.
|
||||
However, the task engine will still deduplicate tasks. For instance, when `foo` is executed, it will only compile once,
|
||||
even though `test in Test` depends on compile. [#1817][1817]/[#1001][1001] by [@eed3si9n][@eed3si9n]
|
||||
|
||||
### Bytecode Enhancers
|
||||
|
||||
sbt 0.13.8 adds an extension point whereby users can effectively manipulate java bytecode (.class files) *before* the
|
||||
incremental compiler attempts to cache the classfile hashes. This allows libraries like ebean to function with sbt
|
||||
without corrupting the compiler cache and rerunning compile every few seconds.
|
||||
|
||||
This splits the compile task into several subTasks:
|
||||
|
||||
1. `previousCompile`: This task returns the previously persisted `Analysis` object for this project.
|
||||
2. `compileIncremental`: This is the core logic of compiling Scala/Java files together. This task actually does the
|
||||
work of compiling a project incrementally, including ensuring a minimum number of source files are compiled.
|
||||
After this method, all .class files that would be generated by scalac + javac will be available.
|
||||
3. `manipulateByteCode`: This is a stub task which takes the `compileIncremental` result and returns it.
|
||||
Plugins which need to manipulate bytecode are expected to override this task with their own implementation, ensuring
|
||||
to call the previous behavior.
|
||||
4. `compile`: This task depends on `manipulateBytecode` and then persists the `Analysis` object containing all
|
||||
incremental compiler information.
|
||||
|
||||
Here's an example of how to hook the new `manipulateBytecode` key in your own plugin:
|
||||
|
||||
manipulateBytecode in Compile := {
|
||||
val previous = (manipulateBytecode in Compile).value
|
||||
doManipulateBytecode(previous) // Note: This must return a new Compiler.CompileResult with our changes.
|
||||
}
|
||||
|
||||
See [#1714][1714] for the full details of the implementation.
|
||||
|
|
|
|||
|
|
@ -1,44 +0,0 @@
|
|||
[@jsuereth]: https://github.com/jsuereth
|
||||
[1676]: https://github.com/sbt/sbt/issues/1676
|
||||
[1322]: https://github.com/sbt/sbt/issues/1322
|
||||
[679]: https://github.com/sbt/sbt/issues/679
|
||||
[647]: https://github.com/sbt/sbt/issues/647
|
||||
[1616]: https://github.com/sbt/sbt/issues/1616
|
||||
|
||||
### Fixes with compatibility implications
|
||||
|
||||
### Improvements
|
||||
|
||||
### Maven resolver plugin
|
||||
|
||||
sbt 0.13.8 adds an extension point in the dependency resolution to customize Maven resolvers.
|
||||
This allows us to write sbt-maven-resolver auto plugin, which internally uses Eclipse Aether
|
||||
to resolve Maven dependencies instead of Apache Ivy.
|
||||
|
||||
To enable this plugin, add the following to `project/maven.sbt` (or `project/plugin.sbt` the file name doesn't matter):
|
||||
|
||||
libraryDependencies += Defaults.sbtPluginExtra("org.scala-sbt" % "sbt-maven-resolver" % sbtVersion.value,
|
||||
sbtBinaryVersion.value, scalaBinaryVersion.value)
|
||||
|
||||
This will create a new `~/.ivy2/maven-cache` directory, which contains the Aether cache of files.
|
||||
You may notice some file will be re-downloaded for the new cache layout.
|
||||
Additionally, sbt will now be able to fully construct
|
||||
`maven-metadata.xml` files when publishing to remote repositories or when publishing to the local `~/.m2/repository`.
|
||||
This should help erase many of the deficiencies encountered when using Maven and sbt together.
|
||||
|
||||
**Notes and known limitations**:
|
||||
|
||||
- sbt-maven-resolver requires sbt 0.13.8 and above.
|
||||
- The current implementation does not support Ivy-style dynamic revisions, such as "2.10.+" or "latest.snapshot". This
|
||||
is a fixable situation, but the version range query and Ivy -> Maven version range translation code has not been migrated.
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- sbt doesn't honor Maven's uniqueVersions (use sbt-maven-resolver to fix). [#1322][1322] by [@jsuereth][@jsuereth]
|
||||
- sbt doesn't see new SNAPSHOT dependency versions in local maven repos (use withLatestSnapshots + sbt-maven-resolver to fix) [#321][321] by [@jsuereth][@jsuereth]
|
||||
- Property in pom's version field results to wrong dependency resolution (use sbt-maven-resolver to fix). [#647][647] by [@jsuereth][@jsuereth]
|
||||
- Maven local resolver with parent POM (use sbt-maven-resolver). [#1616][1616] by [@jsuereth][@jsuereth]
|
||||
|
||||
// Possibly fixed, need verification.
|
||||
- 1676 - SNAPSHOT dependency not updated ???
|
||||
- 679 - Incorrect Maven Snapshot file resolution ????
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
[@cunei]: https://github.com/cunei
|
||||
[@eed3si9n]: https://github.com/eed3si9n
|
||||
[@gkossakowski]: https://github.com/gkossakowski
|
||||
[@jsuereth]: https://github.com/jsuereth
|
||||
[1752]: https://github.com/sbt/sbt/pull/1752
|
||||
|
||||
### Fixes with compatibility implications
|
||||
|
||||
### Improvements
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Fixes cached resolution being too verbose. [#1752][1752]
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
[1714]: https://github.com/sbt/sbt/issues/1714
|
||||
|
||||
|
||||
### Fixes with compatibility implications
|
||||
|
||||
### Improvements
|
||||
|
||||
### Bytecode Enhancers
|
||||
|
||||
sbt 0.13.8 adds an extension point whereby users can effectively manipulate java bytecode (.class files) *before* the
|
||||
incremental compiler attempts to cache the classfile hashes. This allows libraries like ebean to function with sbt
|
||||
without corrupting the compiler cache and rerunning compile every few seconds.
|
||||
|
||||
This splits the compile task into several subTasks:
|
||||
|
||||
1. `previousCompile`: This task returns the previously persisted `Analysis` object for this project.
|
||||
2. `compileIncremental`: This is the core logic of compiling Scala/Java files together. This task actually does the
|
||||
work of compiling a project incrementally, including ensuring a minimum number of source files are compiled.
|
||||
After this method, all .class files that would be generated by scalac + javac will be available.
|
||||
3. `manipulateByteCode`: This is a stub task which takes the `compileIncremental` result and returns it.
|
||||
Plugins which need to manipulate bytecode are expected to override this task with their own implementation, ensuring
|
||||
to call the previous behavior.
|
||||
4. `compile`: This task depends on `manipulateBytecode` and then persists the `Analysis` object containing all
|
||||
incremental compiler information.
|
||||
|
||||
Here's an example of how to hook the new `manipulateBytecode` key in your own plugin:
|
||||
|
||||
manipulateBytecode in Compile := {
|
||||
val previous = (manipulateBytecode in Compile).value
|
||||
doManipulateBytecode(previous) // Note: This must return a new Compiler.CompileResult with our changes.
|
||||
}
|
||||
|
||||
See [#1714][1714] for the full details of the implementation.
|
||||
|
||||
### Bug fixes
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
[@cunei]: https://github.com/cunei
|
||||
[@eed3si9n]: https://github.com/eed3si9n
|
||||
[@gkossakowski]: https://github.com/gkossakowski
|
||||
[@jsuereth]: https://github.com/jsuereth
|
||||
[1615]: https://github.com/sbt/sbt/issues/1615
|
||||
|
||||
### Fixes with compatibility implications
|
||||
|
||||
### Improvements
|
||||
|
||||
- `evicted` will display all evictions (including the ones not suspected of binary incompatibility). [#1615][1615] by [@eed3si9n][@eed3si9n]
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Fixes eviction warning being too noisy. [#1615][1615] by [@eed3si9n][@eed3si9n]
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
[@cunei]: https://github.com/cunei
|
||||
[@eed3si9n]: https://github.com/eed3si9n
|
||||
[@gkossakowski]: https://github.com/gkossakowski
|
||||
[@jsuereth]: https://github.com/jsuereth
|
||||
[1634]: https://github.com/sbt/sbt/pull/1634
|
||||
|
||||
### Fixes with compatibility implications
|
||||
|
||||
### Improvements
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Issues warning if multiple dependencies to a same library is found with different version. [#1634][1634] by [@eed3si9n][@eed3si9n]
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
[@cunei]: https://github.com/cunei
|
||||
[@eed3si9n]: https://github.com/eed3si9n
|
||||
[@gkossakowski]: https://github.com/gkossakowski
|
||||
[@jsuereth]: https://github.com/jsuereth
|
||||
[1766]: https://github.com/sbt/sbt/pull/1766
|
||||
|
||||
### Fixes with compatibility implications
|
||||
|
||||
### Improvements
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Removes "No main class detected" warning. [#1766][1766] by [@eed3si9n][@eed3si9n]
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
[@cunei]: https://github.com/cunei
|
||||
[@eed3si9n]: https://github.com/eed3si9n
|
||||
[@gkossakowski]: https://github.com/gkossakowski
|
||||
[@jsuereth]: https://github.com/jsuereth
|
||||
[1817]: https://github.com/sbt/sbt/pull/1817
|
||||
[1001]: https://github.com/sbt/sbt/issues/1001
|
||||
[Custom-Settings0]: http://www.scala-sbt.org/0.13/tutorial/Custom-Settings.html
|
||||
|
||||
### Fixes with compatibility implications
|
||||
|
||||
### Improvements
|
||||
|
||||
### Bug fixes
|
||||
|
||||
### Sequential tasks
|
||||
|
||||
sbt 0.13.8 adds a new `Def.sequential` function to run tasks under semi-sequential semantics.
|
||||
Here's an example usage:
|
||||
|
||||
lazy val root = project.
|
||||
settings(
|
||||
testFile := target.value / "test.txt",
|
||||
sideEffect0 := {
|
||||
val t = testFile.value
|
||||
IO.append(t, "0")
|
||||
t
|
||||
},
|
||||
sideEffect1 := {
|
||||
val t = testFile.value
|
||||
IO.append(t, "1")
|
||||
t
|
||||
},
|
||||
foo := Def.sequential(compile in Compile, sideEffect0, sideEffect1, test in Test).value
|
||||
)
|
||||
|
||||
Normally sbt's task engine will reorder tasks based on the dependencies among the tasks,
|
||||
and run as many tasks in parallel (See [Custom settings and tasks][Custom-Settings0] for more details on this).
|
||||
`Def.sequential` instead tries to run the tasks in the specified order.
|
||||
However, the task engine will still deduplicate tasks. For instance, when `foo` is executed, it will only compile once,
|
||||
even though `test in Test` depends on compile. [#1817][1817]/[#1001][1001] by [@eed3si9n][@eed3si9n]
|
||||
Loading…
Reference in New Issue