This is an automated email from the ASF dual-hosted git repository.
slawrence pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/daffodil-sbt.git
The following commit(s) were added to refs/heads/main by this push:
new 6ceba1e Enable `src/{main,test}/scala-XYZ` crossPath directories
6ceba1e is described below
commit 6ceba1eb29a2b7bc84ce450d4ba9c90cbf0a4574
Author: Steve Lawrence <[email protected]>
AuthorDate: Wed Feb 18 10:41:57 2026 -0500
Enable `src/{main,test}/scala-XYZ` crossPath directories
The plugin currently adds `src/{main,test}/scala-daffodil-X.Y.Z/`
directories as source directories as a way to have daffodil version
specific code to support building and testing with multiple daffodil
versions.
However, most of the time Daffodil differences can be generalized into
Scala binary differences, so it would be more useful to use
`src/{main,test}/scala-{2.12,2.13,3}/` directories. Though we currently
disable those by setting `crossPaths := false`.
The intention of setting `crossPaths` to false was to remove the scala
binary version compatibility versions from jars, since that information
isn't needed and just adds extra complexity to jars and dependencies. To
keep this behavior, but to add support for cross paths added by SBT,
this instead sets `crossPaths := true` and set `crossVersions` to
disabled. This also removes the scala-XYZ cross path from target
directories to maintain old behavior.
Closes #161
---
.../scala/org/apache/daffodil/DaffodilPlugin.scala | 24 +++++++++++++++-------
.../OnlyScala212.scala | 4 ++--
.../OnlyScala213.scala | 2 +-
.../OnlyScala3.scala | 4 ++--
.../{OnlyScala212.scala => OnlyDaffodil3100.scala} | 2 +-
.../{OnlyScala213.scala => OnlyDaffodil3110.scala} | 2 +-
.../{OnlyScala3.scala => OnlyDaffodil40.scala} | 2 +-
.../sbt-daffodil/cross-versions-01/test.script | 8 ++++++++
8 files changed, 33 insertions(+), 15 deletions(-)
diff --git a/src/main/scala/org/apache/daffodil/DaffodilPlugin.scala
b/src/main/scala/org/apache/daffodil/DaffodilPlugin.scala
index 7d3dafb..1fbb960 100644
--- a/src/main/scala/org/apache/daffodil/DaffodilPlugin.scala
+++ b/src/main/scala/org/apache/daffodil/DaffodilPlugin.scala
@@ -840,22 +840,32 @@ object DaffodilPlugin extends AutoPlugin {
},
// The above changes the name so that projects that build daffodil
plugins include the
- // cross version id in it. We no longer need crossPaths since the
daffodil version
- // provides enough differentiation, and each Daffodil version only
supports a single
- // Scala version.
- crossPaths := false,
+ // daffodil version id in the classifier. This essentially makes the
scala binary
+ // compatabiilty suffix added to jars redundant information since
binary compatability
+ // is implied by the Daffodil version. So we can disable the
crossVersion setting to
+ // stop SBT from adding that scala version suffix to the jar.
Everything else still
+ // works as expected. Note that we also explicitly enable crossPaths,
which enables
+ // directories like src/{main,test}/scala-XYZ, which can be useful for
plugins and tests
+ // that need Scala or Daffodil version specific code. We also modify
crossTarget to
+ // remove the scala-XYZ directory. This maintains the same directory
structure as
+ // older plugin versions.
+ crossVersion := CrossVersion.disabled,
+ crossPaths := true,
+ crossTarget := crossTarget.value.getParentFile,
// Add src/{main,test}/{scala,java}-daffodil-$daffodilVersion as
additional source
// directories. This directories can be used for Daffodil version
specific code and is
// only used for a single cross version project.
Compile / unmanagedSourceDirectories ++= (Compile /
unmanagedSourceDirectories).value
+ .filter { d => d.name == "scala" || d.name == "java" }
.map { d =>
d.getParentFile / (d.name + "-daffodil-" + daffodilVersion.value)
},
- Test / unmanagedSourceDirectories ++= (Test /
unmanagedSourceDirectories).value.map {
- d =>
+ Test / unmanagedSourceDirectories ++= (Test /
unmanagedSourceDirectories).value
+ .filter { d => d.name == "scala" || d.name == "java" }
+ .map { d =>
d.getParentFile / (d.name + "-daffodil-" + daffodilVersion.value)
- },
+ },
// set daffodilPackageBinVersions to the version of daffodil this
project uses. Saved
// parsers will only be created if daffodilPackageBinInfos is set
diff --git
a/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.10.0/OnlyScala212.scala
b/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-2.12/OnlyScala212.scala
similarity index 94%
copy from
src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.10.0/OnlyScala212.scala
copy to
src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-2.12/OnlyScala212.scala
index a02d753..100a9da 100644
---
a/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.10.0/OnlyScala212.scala
+++
b/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-2.12/OnlyScala212.scala
@@ -15,8 +15,8 @@
* limitations under the License.
*/
-// Not an actual layer. This is only used to show plugins can include Daffodil
version specific
-// files. This code should only compile on Scala 2.12 (used by Daffodil 3.10.0)
+// Not an actual layer. This is only used to show plugins can include Scala
version specific
+// files. This code should only compile on Scala 2.12 (used by Daffodil 3.10.0
and older)
object OnlyScala212 {
val l: TraversableOnce[Int] = List(1, 2, 3)
diff --git
a/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.11.0/OnlyScala213.scala
b/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-2.13/OnlyScala213.scala
similarity index 97%
copy from
src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.11.0/OnlyScala213.scala
copy to
src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-2.13/OnlyScala213.scala
index 428a5a5..f7f7e34 100644
---
a/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.11.0/OnlyScala213.scala
+++
b/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-2.13/OnlyScala213.scala
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-// Not an actual layer. This is only used to show plugins can include Daffodil
version specific
+// Not an actual layer. This is only used to show plugins can include Scala
version specific
// files. This code should only compile on Scala 2.13 (used by Daffodil 3.11.0)
object OnlyScala213 {
diff --git
a/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-4.0.0/OnlyScala3.scala
b/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-3/OnlyScala3.scala
similarity index 95%
copy from
src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-4.0.0/OnlyScala3.scala
copy to
src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-3/OnlyScala3.scala
index da635cd..6b0d94b 100644
---
a/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-4.0.0/OnlyScala3.scala
+++
b/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-3/OnlyScala3.scala
@@ -15,8 +15,8 @@
* limitations under the License.
*/
-// Not an actual layer. This is only used to show plugins can include Daffodil
version specific
-// files. This code should only compile on Scala 3 (used by Daffodil 4.0.0)
+// Not an actual layer. This is only used to show plugins can include scala
version specific
+// files. This code should only compile on Scala 3 (used by Daffodil 4.0.0 and
newer)
// enum is a new keyword in Scala 3
enum OnlyScala3 {
diff --git
a/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.10.0/OnlyScala212.scala
b/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.10.0/OnlyDaffodil3100.scala
similarity index 97%
rename from
src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.10.0/OnlyScala212.scala
rename to
src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.10.0/OnlyDaffodil3100.scala
index a02d753..2e60a4f 100644
---
a/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.10.0/OnlyScala212.scala
+++
b/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.10.0/OnlyDaffodil3100.scala
@@ -18,6 +18,6 @@
// Not an actual layer. This is only used to show plugins can include Daffodil
version specific
// files. This code should only compile on Scala 2.12 (used by Daffodil 3.10.0)
-object OnlyScala212 {
+object OnlyDaffodil3100 {
val l: TraversableOnce[Int] = List(1, 2, 3)
}
diff --git
a/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.11.0/OnlyScala213.scala
b/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.11.0/OnlyDaffodil3110.scala
similarity index 97%
rename from
src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.11.0/OnlyScala213.scala
rename to
src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.11.0/OnlyDaffodil3110.scala
index 428a5a5..2414926 100644
---
a/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.11.0/OnlyScala213.scala
+++
b/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-3.11.0/OnlyDaffodil3110.scala
@@ -18,7 +18,7 @@
// Not an actual layer. This is only used to show plugins can include Daffodil
version specific
// files. This code should only compile on Scala 2.13 (used by Daffodil 3.11.0)
-object OnlyScala213 {
+object OnlyDaffodil3110 {
val l: LazyList[Int] = LazyList(1, 2, 3) // fails in Scala 2.12
val s = 'mySymbol // fails in Scala 3
}
diff --git
a/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-4.0.0/OnlyScala3.scala
b/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-4.0.0/OnlyDaffodil40.scala
similarity index 97%
rename from
src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-4.0.0/OnlyScala3.scala
rename to
src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-4.0.0/OnlyDaffodil40.scala
index da635cd..af9b51b 100644
---
a/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-4.0.0/OnlyScala3.scala
+++
b/src/sbt-test/sbt-daffodil/cross-versions-01/src/main/scala-daffodil-4.0.0/OnlyDaffodil40.scala
@@ -19,7 +19,7 @@
// files. This code should only compile on Scala 3 (used by Daffodil 4.0.0)
// enum is a new keyword in Scala 3
-enum OnlyScala3 {
+enum OnlyDaffodil400 {
case A, B, C
}
diff --git a/src/sbt-test/sbt-daffodil/cross-versions-01/test.script
b/src/sbt-test/sbt-daffodil/cross-versions-01/test.script
index a68e2fa..f95dbbb 100644
--- a/src/sbt-test/sbt-daffodil/cross-versions-01/test.script
+++ b/src/sbt-test/sbt-daffodil/cross-versions-01/test.script
@@ -18,24 +18,29 @@
> package
$ exists target/test-plugin-0.1-daffodil3100.jar
+$ exists target/classes/OnlyDaffodil3100.class
$ exists target/classes/OnlyScala212.class
$ exists target/classes/AllScala.class
$ absent target/daffodil3110/test-plugin-0.1-daffodil3110.jar
+$ absent target/daffodil3110/classes/OnlyDaffodil3110.class
$ absent target/daffodil3110/classes/OnlyScala213.class
$ absent target/daffodil3110/classes/AllScala.class
$ absent target/daffodil400/test-plugin-0.1-daffodil400.jar
+$ absent target/daffodil400/classes/OnlyDaffodil400.class
$ absent target/daffodil400/classes/OnlyScala3.class
$ absent target/daffodil400/classes/AllScala.class
> test_daffodil3110/package
$ exists target/daffodil3110/test-plugin-0.1-daffodil3110.jar
+$ exists target/daffodil3110/classes/OnlyDaffodil3110.class
$ exists target/daffodil3110/classes/OnlyScala213.class
$ exists target/daffodil3110/classes/AllScala.class
> test_daffodil400/package
$ exists target/daffodil400/test-plugin-0.1-daffodil400.jar
+$ exists target/daffodil400/classes/OnlyDaffodil400.class
$ exists target/daffodil400/classes/OnlyScala3.class
$ exists target/daffodil400/classes/AllScala.class
@@ -44,13 +49,16 @@ $ exists target/daffodil400/classes/AllScala.class
> package
$ exists target/test-plugin-0.1-daffodil3100.jar
+$ exists target/classes/OnlyDaffodil3100.class
$ exists target/classes/OnlyScala212.class
$ exists target/classes/AllScala.class
$ exists target/daffodil3110/test-plugin-0.1-daffodil3110.jar
+$ exists target/daffodil3110/classes/OnlyDaffodil3110.class
$ exists target/daffodil3110/classes/OnlyScala213.class
$ exists target/daffodil3110/classes/AllScala.class
$ exists target/daffodil400/test-plugin-0.1-daffodil400.jar
+$ exists target/daffodil400/classes/OnlyDaffodil400.class
$ exists target/daffodil400/classes/OnlyScala3.class
$ exists target/daffodil400/classes/AllScala.class