You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@daffodil.apache.org by sl...@apache.org on 2026/02/24 17:29:17 UTC
(daffodil-sbt) branch main updated: Enable `src/{main,test}/scala-XYZ` crossPath directories
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 <sl...@apache.org>
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