From af556b297a5b7009722d2a3a0bdd2a7e93307dff Mon Sep 17 00:00:00 2001
From: xuwei-k <6b656e6a69@gmail.com>
Date: Sun, 5 Apr 2026 16:17:05 +0900
Subject: [PATCH] Add sbt 2 cross build setting
---
.github/workflows/ci.yml | 6 +++++-
.github/workflows/release.yml | 2 +-
.scalafmt.conf | 2 +-
build.sbt | 12 +++++++++++-
src/main/scala/sbtpomreader/MavenHelper.scala | 15 ++++++++-------
.../sbtpomreader/MavenProjectHelper.scala | 18 +++++++++---------
.../sbtpomreader/MavenUserSettingsHelper.scala | 8 ++++----
src/main/scala/sbtpomreader/SbtPomKeys.scala | 1 +
8 files changed, 40 insertions(+), 24 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 13c4710..d2721a7 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -38,7 +38,11 @@ jobs:
- uses: sbt/setup-sbt@v1
- name: Test
shell: bash
- run: sbt -v clean +test +scripted
+ run: sbt -v clean test scripted
+ - name: Test sbt 2
+ shell: bash
+ if: ${{ matrix.java != '8' }}
+ run: sbt -v "++ 3.x" test # TODO enable scripted test
- name: Ensure formatting
shell: bash
run: sbt -v clean scalafmtSbtCheck scalafmtCheckAll
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index f7f5442..46904b1 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -20,7 +20,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: "zulu"
- java-version: "8"
+ java-version: "17"
cache: sbt
- uses: sbt/setup-sbt@v1
- name: Release
diff --git a/.scalafmt.conf b/.scalafmt.conf
index 6347eb3..6d9d19d 100644
--- a/.scalafmt.conf
+++ b/.scalafmt.conf
@@ -1,4 +1,4 @@
-version = "3.8.0"
+version = "3.11.0"
maxColumn = 120
project.git = true
runner.dialect = scala212source3
diff --git a/build.sbt b/build.sbt
index cf019aa..f4fa3ac 100644
--- a/build.sbt
+++ b/build.sbt
@@ -19,6 +19,14 @@ lazy val root = (project in file("."))
.enablePlugins(SbtPlugin)
.settings(nocomma {
name := "sbt-pom-reader"
+ scalacOptions ++= {
+ scalaBinaryVersion.value match {
+ case "2.12" =>
+ Seq("-release:8")
+ case _ =>
+ Nil
+ }
+ }
scalacOptions ++= Seq(
"-Wconf:any:wv",
"-Xlint:unused",
@@ -46,10 +54,12 @@ lazy val root = (project in file("."))
scriptedLaunchOpts := scriptedLaunchOpts.value ++ Seq("-Dproject.version=" + version.value)
scriptedLaunchOpts ++= Seq("-Dplugin.version=" + version.value)
scriptedBufferLog := true
+ crossScalaVersions += "3.8.4"
+ addSbtPlugin("com.github.sbt" % "sbt2-compat" % "0.1.0")
(pluginCrossBuild / sbtVersion) := {
scalaBinaryVersion.value match {
case "2.12" => "1.9.9"
- case _ => "2.0.0-RC6"
+ case _ => "2.0.0"
}
}
scriptedSbt := {
diff --git a/src/main/scala/sbtpomreader/MavenHelper.scala b/src/main/scala/sbtpomreader/MavenHelper.scala
index fb9b4c5..a832232 100644
--- a/src/main/scala/sbtpomreader/MavenHelper.scala
+++ b/src/main/scala/sbtpomreader/MavenHelper.scala
@@ -16,6 +16,7 @@ import org.apache.maven.model.{
Repository as PomRepository
}
import org.apache.maven.settings.Settings as MavenSettings
+import sbtcompat.PluginCompat.*
/** Helper object to extract maven settings. */
object MavenHelper {
@@ -99,7 +100,7 @@ object MavenHelper {
pr ++ sr
},
// TODO - split into Compile/Test/Runtime/Console
- scalacOptions ++= {
+ scalacOptions ++= Def.uncached {
getScalacOptions(effectivePom.value)
},
credentials ++= createSbtCredentialsFromUserSettings(effectivePom.value, effectiveSettings.value)
@@ -132,10 +133,10 @@ object MavenHelper {
}
def getAdditionalSourcesPlugin(pom: PomModel): Seq[PomPlugin] = {
- pom.getBuild.getPlugins.asScala filter { plugin =>
+ pom.getBuild.getPlugins.asScala.filter { plugin =>
(plugin.getGroupId == "org.codehaus.mojo") &&
(plugin.getArtifactId == "build-helper-maven-plugin")
- }
+ }.toSeq
}
def getAdditionalSourcesFromPlugin(pom: PomModel): Seq[String] = {
@@ -226,7 +227,7 @@ object MavenHelper {
case (Some(mScope), Some(mType)) if ("test-jar".equalsIgnoreCase(mType)) =>
mod
.withConfigurations(Some(s"${mScope}->test"))
- .intransitive
+ .intransitive()
// tests
// SCOPE
case (Some(mScope), _) if (mvnClassifier.getOrElse("").equalsIgnoreCase("tests")) =>
@@ -247,7 +248,7 @@ object MavenHelper {
def getDependencies(pom: PomModel): Seq[ModuleID] = {
for {
- dep <- pom.getDependencies.asScala
+ dep <- pom.getDependencies.asScala.toSeq
} yield convertDep(dep)
}
@@ -263,7 +264,7 @@ object MavenHelper {
def getPomResolvers(pom: PomModel): Seq[Resolver] = {
for {
- repo <- pom.getRepositories.asScala
+ repo <- pom.getRepositories.asScala.toSeq
// TODO - Support other layouts
if repo.getLayout == "default"
} yield repo.getId at repo.getUrl
@@ -276,7 +277,7 @@ object MavenHelper {
def getServerRealm(method: String, uri: String): Option[String] = {
// This is consigned to a Try until proper handling of offline mode.
Try {
- val con = url(uri).openConnection.asInstanceOf[java.net.HttpURLConnection]
+ val con = new java.net.URI(uri).toURL.openConnection.asInstanceOf[java.net.HttpURLConnection]
con setRequestMethod method
if (con.getResponseCode == 401) {
val authRealmConfigs = con.getHeaderField("WWW-Authenticate")
diff --git a/src/main/scala/sbtpomreader/MavenProjectHelper.scala b/src/main/scala/sbtpomreader/MavenProjectHelper.scala
index 56bc263..56b6b7a 100644
--- a/src/main/scala/sbtpomreader/MavenProjectHelper.scala
+++ b/src/main/scala/sbtpomreader/MavenProjectHelper.scala
@@ -1,6 +1,6 @@
package sbtpomreader
-import sbt.*
+import sbt.{ given, * }
import scala.collection.JavaConverters.*
@@ -103,16 +103,16 @@ object MavenProjectHelper {
// TODO - Configure debugging output....
val currentProject: Project = (
Project(makeProjectName(current.model, overrideRootProjectName), current.dir)
- // First pull in settings from pom
- settings (useMavenPom*)
+ // First pull in settings from pom
+ .settings(useMavenPom*)
// Now update depends on relationships with actual configurations
- dependsOn (projectsWithModules.map { case (p, m) => new ClasspathDependency(p, m.configurations) }*)
+ .dependsOn(projectsWithModules.map { case (p, m) => new ClasspathDependency(p, m.configurations) }*)
// Now fix aggregate relationships
- aggregate (aggregates.map(x => x: ProjectReference)*)
+ .aggregate(aggregates.map(x => x: ProjectReference)*)
// Now remove any inter-project dependencies we pulled in from the maven pom.
// TODO - Maybe we can fix the useMavenPom settings so we don't need to
// post-filter artifacts?
- settings (
+ .settings(
Keys.libraryDependencies := {
val depIds = getDepsFor(current).map(_.id).toSet
Keys.libraryDependencies.value.filterNot { dep =>
@@ -146,7 +146,7 @@ object MavenProjectHelper {
// An unsorted walk of the tree
def allProjectsInTree(tree: ProjectTree): Seq[ProjectTree] =
tree match {
- case x: SimpleProject => Seq(x)
+ case x: SimpleProject => Seq(x)
case agg: AggregateProject =>
Seq(agg) ++ agg.children.flatMap(allProjectsInTree)
}
@@ -156,7 +156,7 @@ object MavenProjectHelper {
for (project <- projects) yield {
val deps =
for {
- dep <- Option(project.model.getDependencies).map(_.asScala).getOrElse(Nil)
+ dep <- Option(project.model.getDependencies).map(_.asScala.toSeq).getOrElse(Nil)
depId = makeId(dep.getGroupId, dep.getArtifactId, dep.getVersion)
pdep <- projects
if pdep.id == depId
@@ -168,7 +168,7 @@ object MavenProjectHelper {
def getChildProjectPoms(pom: PomModel, pomFile: File): Seq[File] =
for {
- childDirName <- Option(pom.getModules) map (_.asScala) getOrElse Nil
+ childDirName <- Option(pom.getModules) map (_.asScala.toSeq) getOrElse Nil
childPom = pomFile.getParentFile / childDirName / "pom.xml"
if childPom.exists
} yield childPom
diff --git a/src/main/scala/sbtpomreader/MavenUserSettingsHelper.scala b/src/main/scala/sbtpomreader/MavenUserSettingsHelper.scala
index 3dd6307..7eed62e 100644
--- a/src/main/scala/sbtpomreader/MavenUserSettingsHelper.scala
+++ b/src/main/scala/sbtpomreader/MavenUserSettingsHelper.scala
@@ -33,7 +33,7 @@ object MavenUserSettingsHelper {
def getUserResolvers(settings: MavenSettings): Seq[Resolver] = {
val profiles = settings.getProfilesAsMap
for {
- profileName <- settings.getActiveProfiles.asScala
+ profileName <- settings.getActiveProfiles.asScala.toSeq
profile <- Option(profiles.get(profileName)).toSeq
repo <- profile.getRepositories.asScala
} yield repo.getId at repo.getUrl
@@ -43,7 +43,7 @@ object MavenUserSettingsHelper {
def getUserRemoteRepositories(settings: MavenSettings): Seq[RemoteRepository] = {
val profiles = settings.getProfilesAsMap
for {
- profileName <- settings.getActiveProfiles.asScala
+ profileName <- settings.getActiveProfiles.asScala.toSeq
profile <- Option(profiles.get(profileName)).toSeq
repo <- profile.getRepositories.asScala
} yield new RemoteRepository.Builder(repo.getId, repo.getLayout, repo.getUrl).build()
@@ -52,7 +52,7 @@ object MavenUserSettingsHelper {
/** Extract the server credentials from the given settings file. */
def serverCredentials(settings: MavenSettings): Seq[ServerCredentials] =
for {
- s <- settings.getServers.asScala
+ s <- settings.getServers.asScala.toSeq
} yield ServerCredentials(s.getId, s.getUsername, s.getPassword)
/** Associates server credentials defined in the settings with repositories referenced in the POM. */
@@ -63,7 +63,7 @@ object MavenUserSettingsHelper {
): Seq[(PomRepository, ServerCredentials)] = {
// TODO: handle repos in settings.xml
for {
- repo <- pom.getRepositories.asScala
+ repo <- pom.getRepositories.asScala.toSeq
cred <- creds
if cred.id == repo.getId
} yield (repo -> cred)
diff --git a/src/main/scala/sbtpomreader/SbtPomKeys.scala b/src/main/scala/sbtpomreader/SbtPomKeys.scala
index af38e10..5e578c9 100644
--- a/src/main/scala/sbtpomreader/SbtPomKeys.scala
+++ b/src/main/scala/sbtpomreader/SbtPomKeys.scala
@@ -20,6 +20,7 @@ trait SbtPomKeys {
lazy val effectivePom = SettingKey[Model]("mvn-effective-pom", "Reads the maven effective pom.")
lazy val effectiveSettings =
SettingKey[Option[MavenSettings]]("mvn-effective-settings", "The effective maven settings model.")
+ @transient
lazy val showEffectivePom = TaskKey[Unit]("show-effective-pom", "Displays the effective pom from maven.")
lazy val mavenUserProperties =
SettingKey[Map[String, String]]("maven-user-properties", "A map of user properties to be applied")