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

Reply via email to