Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 12 additions & 6 deletions src/main/scala/sbtpomreader/MavenHelper.scala
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,18 @@ object MavenHelper {
mvnLocalRepository := defaultLocalRepo,
profiles := Seq.empty,
mavenUserProperties := Map.empty,
effectivePom := loadEffectivePom(
pomLocation.value,
mvnLocalRepository.value,
profiles.value,
mavenUserProperties.value
),
effectivePom := {
val settingsRepos = effectiveSettings.value
.map(MavenUserSettingsHelper.getUserRemoteRepositories)
.getOrElse(Seq.empty)
loadEffectivePom(
pomLocation.value,
mvnLocalRepository.value,
profiles.value,
mavenUserProperties.value,
settingsRepos
)
},
effectiveSettings := loadUserSettings(settingsLocation.value, profiles.value),
showEffectivePom := showPom(pomLocation.value, effectivePom.value, streams.value),
isJavaOnly := false
Expand Down
14 changes: 5 additions & 9 deletions src/main/scala/sbtpomreader/MavenPomResolver.scala
Original file line number Diff line number Diff line change
Expand Up @@ -32,22 +32,18 @@ class MavenPomResolver(system: RepositorySystem, localRepo: File) {
new RemoteRepository.Builder("central", "default", "https://repo.maven.apache.org/maven2").build()
)

// TODO - Add repositories from the pom...
val modelResolver: ModelResolver = {
new MavenModelResolver(
session,
system,
repositories = defaultRepositories
)
}

def loadEffectivePom(
pomFile: File,
repositories: Seq[RemoteRepository],
activeProfiles: Seq[String],
userPropsMap: Map[String, String]
): Model =
try {
val modelResolver: ModelResolver = new MavenModelResolver(
session,
system,
repositories = defaultRepositories ++ repositories
)
val userProperties = new java.util.Properties()
userPropsMap.foreach(kv => userProperties.put(kv._1, kv._2))
val request = new DefaultModelBuildingRequest
Expand Down
11 changes: 11 additions & 0 deletions src/main/scala/sbtpomreader/MavenUserSettingsHelper.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import scala.collection.JavaConverters.*
import org.apache.maven.model.{ Model as PomModel, Repository as PomRepository }
import org.apache.maven.settings.Settings as MavenSettings
import org.apache.maven.settings.building.{ DefaultSettingsBuilderFactory, DefaultSettingsBuildingRequest }
import org.eclipse.aether.repository.RemoteRepository

/**
* Helper object with functions to extract settings from the user's Maven settings file (typically ~/.m2/settings.xml)
Expand Down Expand Up @@ -38,6 +39,16 @@ object MavenUserSettingsHelper {
} yield repo.getId at repo.getUrl
}

/** Extract repositories from user settings as Aether RemoteRepository objects for POM resolution. */
def getUserRemoteRepositories(settings: MavenSettings): Seq[RemoteRepository] = {
val profiles = settings.getProfilesAsMap
for {
profileName <- settings.getActiveProfiles.asScala
profile <- Option(profiles.get(profileName)).toSeq
repo <- profile.getRepositories.asScala
} yield new RemoteRepository.Builder(repo.getId, repo.getLayout, repo.getUrl).build()
}

/** Extract the server credentials from the given settings file. */
def serverCredentials(settings: MavenSettings): Seq[ServerCredentials] =
for {
Expand Down
5 changes: 3 additions & 2 deletions src/main/scala/sbtpomreader/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ package object sbtpomreader {
pom: File,
localRepo: File = defaultLocalRepo,
profiles: Seq[String],
userProps: Map[String, String]
userProps: Map[String, String],
additionalRepositories: Seq[org.eclipse.aether.repository.RemoteRepository] = Seq.empty
) =
MavenPomResolver(localRepo).loadEffectivePom(pom, Seq.empty, profiles, userProps)
MavenPomResolver(localRepo).loadEffectivePom(pom, additionalRepositories, profiles, userProps)
}
9 changes: 7 additions & 2 deletions src/sbt-test/simple-pom/can-read-settings-repos/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ TaskKey[Unit]("checkSettings") := {
val extracted = Project extract state.value
val rez = extracted.get(resolvers)
// Should only pick up one of the two repositories due to profile activation.
assert(rez.exists(_.name == "sbt-bintray"))
assert(!rez.exists(_.name == "one-sad-repo"))
assert(rez.exists(_.name == "sbt-bintray"), "Expected sbt-bintray in resolvers, found: " + rez)
assert(!rez.exists(_.name == "one-sad-repo"), "Unexpected one-sad-repo in resolvers")

// Verify effective POM loaded successfully with settings repos wired in.
val pom = extracted.get(effectivePom)
assert(pom != null, "effectivePom should be loaded")
assert(pom.getGroupId == "com.jsuereth.junk", "Expected groupId com.jsuereth.junk, found: " + pom.getGroupId)
}