Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Only pull compile dependencies during compilation #4028

Merged
merged 7 commits into from
Nov 28, 2024
Merged
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
19 changes: 17 additions & 2 deletions scalalib/src/mill/scalalib/CoursierModule.scala
Original file line number Diff line number Diff line change
@@ -149,6 +149,12 @@ trait CoursierModule extends mill.Module {
*
* The Scala version set via `ScalaModule#scalaVersion` also takes over any Scala version
* provided via `ResolutionParams#scalaVersionOpt`.
*
* The default configuration set in `ResolutionParams#defaultConfiguration` is ignored when
* Mill fetches dependencies to be passed to the compiler (equivalent to Maven "compile scope").
* In that case, it forces the default configuration to be "compile". On the other hand, when
* fetching dependencies for runtime (equivalent to Maven "runtime scope"), the value in
* `ResolutionParams#defaultConfiguration` is used.
*/
def resolutionParams: Task[ResolutionParams] = Task.Anon {
ResolutionParams()
@@ -195,7 +201,8 @@ object CoursierModule {
def resolveDeps[T: CoursierModule.Resolvable](
deps: IterableOnce[T],
sources: Boolean = false,
artifactTypes: Option[Set[coursier.Type]] = None
artifactTypes: Option[Set[coursier.Type]] = None,
resolutionParamsMapOpt: Option[ResolutionParams => ResolutionParams] = None
): Agg[PathRef] = {
Lib.resolveDependencies(
repositories = repositories,
@@ -206,10 +213,18 @@ object CoursierModule {
customizer = customizer,
coursierCacheCustomizer = coursierCacheCustomizer,
ctx = ctx,
resolutionParams = resolutionParams
resolutionParams = resolutionParamsMapOpt.fold(resolutionParams)(_(resolutionParams))
).getOrThrow
}

// bin-compat shim
def resolveDeps[T: CoursierModule.Resolvable](
deps: IterableOnce[T],
sources: Boolean,
artifactTypes: Option[Set[coursier.Type]]
): Agg[PathRef] =
resolveDeps(deps, sources, artifactTypes, None)

@deprecated("Use the override accepting artifactTypes", "Mill after 0.12.0-RC3")
def resolveDeps[T: CoursierModule.Resolvable](
deps: IterableOnce[T],
2 changes: 1 addition & 1 deletion scalalib/src/mill/scalalib/Dep.scala
Original file line number Diff line number Diff line change
@@ -191,7 +191,7 @@ object Dep {
coursier.Dependency(
coursier.Module(coursier.Organization(org), coursier.ModuleName(name)),
version
).withConfiguration(DefaultConfiguration),
),
cross,
force
)
7 changes: 5 additions & 2 deletions scalalib/src/mill/scalalib/JavaModule.scala
Original file line number Diff line number Diff line change
@@ -608,7 +608,8 @@ trait JavaModule
def resolvedIvyDeps: T[Agg[PathRef]] = Task {
defaultResolver().resolveDeps(
transitiveCompileIvyDeps() ++ transitiveIvyDeps(),
artifactTypes = Some(artifactTypes())
artifactTypes = Some(artifactTypes()),
resolutionParamsMapOpt = Some(_.withDefaultConfiguration(coursier.core.Configuration.compile))
)
}

@@ -1101,7 +1102,9 @@ trait JavaModule
Task.Anon {
defaultResolver().resolveDeps(
transitiveCompileIvyDeps() ++ transitiveIvyDeps(),
sources = true
sources = true,
resolutionParamsMapOpt =
Some(_.withDefaultConfiguration(coursier.core.Configuration.compile))
)
},
Task.Anon {
33 changes: 33 additions & 0 deletions scalalib/test/src/mill/scalalib/ResolveDepsTests.scala
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@ import coursier.maven.MavenRepository
import mill.api.Result.{Failure, Success}
import mill.api.{PathRef, Result}
import mill.api.Loose.Agg
import mill.define.Task
import mill.testkit.{UnitTester, TestBaseModule}
import utest._

@@ -42,6 +43,17 @@ object ResolveDepsTests extends TestSuite {
)
def artifactTypes = super.artifactTypes() + coursier.Type("pom")
}

object scope extends JavaModule {
def ivyDeps = Agg(
ivy"androidx.compose.animation:animation-core:1.1.1",
ivy"androidx.compose.ui:ui:1.1.1"
)
def repositoriesTask = Task.Anon {
super.repositoriesTask() :+ coursier.Repositories.google
}
def artifactTypes = super.artifactTypes() + coursier.core.Type("aar")
}
}

val tests = Tests {
@@ -124,5 +136,26 @@ object ResolveDepsTests extends TestSuite {
assert(runCp.exists(_.lastOpt.contains("hadoop-yarn-server-3.4.0.pom")))
}
}

test("scopes") {
UnitTester(TestCase, null).scoped { eval =>
val compileCp = eval(TestCase.scope.compileClasspath)
.toTry.get.value.toSeq.map(_.path)
val runtimeCp = eval(TestCase.scope.upstreamAssemblyClasspath)
.toTry.get.value.toSeq.map(_.path)
val runCp = eval(TestCase.scope.runClasspath)
.toTry.get.value.toSeq.map(_.path)

val runtimeOnlyJars = Seq(
"lifecycle-common-2.3.0.jar",
"lifecycle-runtime-2.3.0.aar"
)
for (runtimeOnlyJar <- runtimeOnlyJars) {
assert(!compileCp.exists(_.last == runtimeOnlyJar))
assert(runtimeCp.exists(_.last == runtimeOnlyJar))
assert(runCp.exists(_.last == runtimeOnlyJar))
}
}
}
}
}