Skip to content

Commit 18bb026

Browse files
authored
Android/cleanup dependency resolution workarounds (#5098)
## Summary Following @alexarchambault work on #4626 I've done some dependency cleanup + others . The aim is to remove as many dependency management workarounds from the past android attempts as possible and rely solely on coursier ## Dependency cleanup I have managed to cleanup most of the examples but I've introduced some small workarounds in two places: 1. Screenshot testing: This is kind of a special case, first even in AGP it's super experimental, and I had to use the defaultResolver to get the runtime dependencies in the tree and put them in the screenshot classpath 2. In the hilt example, I had to add a few dependencies by hand that are marked as runtime only by hand (see below the runtime section). On the good news I've removed the mapDependencies workaround. ## Runtime management - I have introduced some scaffolding to later separate the runtime classpath from the compile time in an effort to have a more flexible way of choosing what to add in the APK. I'm not entirely convinced this is the way to go, it only kind of worked in the screenshot testing and unit testing. I'd like to have it merged for now for later experimentation and if it doesn't get me anywhere I'll remove it. - I've introduced 2 new methods for managing android dependencies on top of the resolvedMvnDeps and resolvedRunMvnDeps for further flexibility, my plan is to allow for further experimentation with coursier (I've already tried locally some configurations by overriding resolvedMvnDeps for example) but haven't found the ideal way for reducing the need to (re)declare some runtime dependencies. ## Android resources I've separated the /resources from /res using `androidResources` and did some housekeeping around classpath resolution. ## Things left to do I think I'll need some help from @alexarchambault , I saw this PR #5070, and I'd like some advice on an alternative approach to use endorse strict versions ## Test hardening - Hilt example now installs the app and runs the activity, to make sure that things are working further than dex packaging - Kotlin compose example also has the same test arrangement to make sure the apk is installable and runnable ## R8 fixes On experimenting with 2-compose example, I've found that main dex args are not available for compiling against Api level 21 (so building the compose example with R8 breaks). I removed it for now, it's not a good default, might revisit later on on adding it for older versions of android
1 parent 880e422 commit 18bb026

File tree

18 files changed

+274
-279
lines changed

18 files changed

+274
-279
lines changed

example/androidlib/java/1-hello-world/build.mill

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,9 @@ object app extends AndroidAppModule {
5050
* resolution resolves conflicts between androidJvm and jvm platform types
5151
*/
5252
def mvnDeps = super.mvnDeps() ++ Seq(
53-
mvn"androidx.test.ext:junit:1.2.1".exclude((
54-
"org.jetbrains.kotlinx",
55-
"kotlinx-coroutines-core-jvm"
56-
)),
53+
mvn"androidx.test.ext:junit:1.2.1",
5754
mvn"androidx.test:runner:1.6.2",
58-
mvn"androidx.test.espresso:espresso-core:3.5.1".exclude((
59-
"org.jetbrains.kotlinx",
60-
"kotlinx-coroutines-core-jvm"
61-
)),
55+
mvn"androidx.test.espresso:espresso-core:3.5.1",
6256
mvn"junit:junit:4.13.2"
6357
)
6458
}

example/androidlib/java/5-R8/build.mill

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,9 @@ object app extends AndroidAppModule { // <2>
7777
* resolution resolves conflicts between androidJvm and jvm platform types
7878
*/
7979
def mvnDeps = super.mvnDeps() ++ Seq(
80-
mvn"androidx.test.ext:junit:1.2.1".exclude(
81-
("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
82-
),
80+
mvn"androidx.test.ext:junit:1.2.1",
8381
mvn"androidx.test:runner:1.6.2",
84-
mvn"androidx.test.espresso:espresso-core:3.5.1".exclude(
85-
("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
86-
),
82+
mvn"androidx.test.espresso:espresso-core:3.5.1",
8783
mvn"junit:junit:4.13.2"
8884
)
8985
}

example/androidlib/java/6-native-libs/build.mill

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,9 @@ object app extends AndroidNativeAppModule { // <1>
5050
* resolution resolves conflicts between androidJvm and jvm platform types
5151
*/
5252
def mvnDeps = super.mvnDeps() ++ Seq(
53-
mvn"androidx.test.ext:junit:1.2.1".exclude(
54-
("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
55-
),
53+
mvn"androidx.test.ext:junit:1.2.1",
5654
mvn"androidx.test:runner:1.6.2",
57-
mvn"androidx.test.espresso:espresso-core:3.5.1".exclude(
58-
("org.jetbrains.kotlinx", "kotlinx-coroutines-core-jvm")
59-
),
55+
mvn"androidx.test.espresso:espresso-core:3.5.1",
6056
mvn"junit:junit:4.13.2"
6157
)
6258
}

example/androidlib/kotlin/1-hello-kotlin/build.mill

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,9 @@ object app extends AndroidAppKotlinModule {
7777
* resolution resolves conflicts between androidJvm and jvm platform types
7878
*/
7979
def mvnDeps = super.mvnDeps() ++ Seq(
80-
mvn"androidx.test.ext:junit:1.2.1".exclude((
81-
"org.jetbrains.kotlinx",
82-
"kotlinx-coroutines-core-jvm"
83-
)),
80+
mvn"androidx.test.ext:junit:1.2.1",
8481
mvn"androidx.test:runner:1.6.2",
85-
mvn"androidx.test.espresso:espresso-core:3.5.1".exclude((
86-
"org.jetbrains.kotlinx",
87-
"kotlinx-coroutines-core-jvm"
88-
)),
82+
mvn"androidx.test.espresso:espresso-core:3.5.1",
8983
mvn"junit:junit:4.13.2"
9084
)
9185
}

example/androidlib/kotlin/2-compose/build.mill

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,34 +27,30 @@ object app extends AndroidAppKotlinModule {
2727
def androidCompileSdk = 35
2828
def androidMinSdk = 26
2929
def androidEnableCompose = true
30+
3031
def androidIsDebug = true
3132

3233
def androidApplicationId = "com.example.composetest"
3334
def androidApplicationNamespace = "com.example.composetest"
3435

3536
def mvnDeps: T[Seq[Dep]] = Seq(
3637
mvn"androidx.core:core-ktx:1.15.0",
37-
mvn"androidx.activity:activity-compose:1.9.3",
38-
mvn"androidx.compose.ui:ui:1.7.5",
39-
mvn"androidx.compose.material3:material3:1.3.1"
38+
mvn"androidx.appcompat:appcompat:1.7.0",
39+
mvn"androidx.annotation:annotation:1.9.1",
40+
mvn"androidx.activity:activity-compose:1.10.0",
41+
mvn"androidx.compose.material3:material3:1.3.1",
42+
mvn"androidx.compose.ui:ui:1.7.6",
43+
mvn"androidx.emoji2:emoji2:1.3.0",
44+
mvn"androidx.compose.ui:ui-graphics:1.7.6",
45+
mvn"androidx.lifecycle:lifecycle-common:2.8.7",
46+
mvn"androidx.lifecycle:lifecycle-process:2.8.7",
47+
mvn"androidx.lifecycle:lifecycle-runtime-compose:2.8.7",
48+
mvn"androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7",
49+
mvn"androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7",
50+
mvn"androidx.customview:customview-poolingcontainer:1.0.0",
51+
mvn"androidx.tracing:tracing:1.2.0"
4052
)
4153

42-
// This is a temporary fix
43-
def mapDependencies: Task[coursier.Dependency => coursier.Dependency] = Task.Anon {
44-
super.mapDependencies().andThen { (d: coursier.Dependency) =>
45-
// otherwise there are some resolution problems (version conflicts), because Coursier is using pom files only,
46-
// but Gradle is working with .module files if available
47-
if (d.module.organization.value == "androidx.collection") {
48-
d.withVersion("1.4.4")
49-
} else if (d.module.organization.value == "androidx.lifecycle") {
50-
d.withVersion("2.8.3")
51-
} else if (d.module.organization.value == "androidx.compose.runtime") {
52-
d.withVersion("1.7.5")
53-
} else {
54-
d
55-
}
56-
}
57-
}
5854
}
5955

6056
////SNIPPET:END
@@ -64,6 +60,30 @@ object app extends AndroidAppKotlinModule {
6460
> ./mill show app.androidApk
6561
".../out/app/androidApk.dest/app.apk"
6662

63+
64+
> ./mill show app.createAndroidVirtualDevice
65+
...Name: test, DeviceId: medium_phone...
66+
67+
> ./mill show app.startAndroidEmulator
68+
69+
> ./mill show app.androidInstall
70+
...All files should be loaded. Notifying the device...
71+
72+
> ./mill show app.androidRun --activity com.example.composetest.MainActivity
73+
[
74+
"Starting: Intent { cmp=com.example.composetest/.MainActivity }",
75+
"Status: ok",
76+
"LaunchState: COLD",
77+
"Activity: com.example.composetest/.MainActivity",
78+
"TotalTime: ...",
79+
"WaitTime: ...",
80+
"Complete"
81+
]
82+
83+
> ./mill show app.stopAndroidEmulator
84+
85+
> ./mill show app.deleteAndroidVirtualDevice
86+
6787
*/
6888

6989
// This command triggers the build process, which installs the necessary build components, compiles the Kotlin

example/androidlib/kotlin/3-compose-screenshot-tests/build.mill

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import mill._, androidlib._, kotlinlib._
1313

1414
import coursier.core.{MinimizedExclusions, ModuleName, Organization}
1515
import coursier.params.ResolutionParams
16-
16+
import coursier.core.VariantSelector.VariantMatcher
17+
import coursier.params.ResolutionParams
1718
// Create and configure an Android SDK module to manage Android SDK paths and tools.
1819
object androidSdkModule0 extends AndroidSdkModule {
1920
def buildToolsVersion = "35.0.0"
@@ -32,29 +33,13 @@ object app extends AndroidAppKotlinModule {
3233
def androidIsDebug = true
3334

3435
def mvnDeps: T[Seq[Dep]] = Seq(
36+
mvn"androidx.appcompat:appcompat:1.7.0",
3537
mvn"androidx.core:core-ktx:1.15.0",
3638
mvn"androidx.activity:activity-compose:1.9.3",
3739
mvn"androidx.compose.ui:ui:1.7.5",
3840
mvn"androidx.compose.material3:material3:1.3.1"
3941
)
4042

41-
// This is a temporary fix
42-
def mapDependencies: Task[coursier.Dependency => coursier.Dependency] = Task.Anon {
43-
super.mapDependencies().andThen { (d: coursier.Dependency) =>
44-
// otherwise there are some resolution problems (version conflicts), because Coursier is using pom files only,
45-
// but Gradle is working with .module files if available
46-
if (d.module.organization.value == "androidx.collection") {
47-
d.withVersion("1.4.4")
48-
} else if (d.module.organization.value == "androidx.lifecycle") {
49-
d.withVersion("2.8.3")
50-
} else if (d.module.organization.value == "androidx.compose.runtime") {
51-
d.withVersion("1.7.5")
52-
} else {
53-
d
54-
}
55-
}
56-
}
57-
5843
object screenshotTest extends AndroidAppKotlinScreenshotTests {
5944

6045
// TODO this exists until auto discovery of methods is implemented

example/thirdparty/androidtodo/build.mill

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ object app extends AndroidAppKotlinModule with AndroidBuildConfig with AndroidHi
1717
def kspVersion = "1.0.28"
1818

1919
def androidApplicationNamespace = "com.example.android.architecture.blueprints.todoapp"
20-
def androidApplicationId = "com.example.android.architecture.blueprints.main"
20+
// TODO change this to com.example.android.architecture.blueprints.main when mill supports build variants
21+
def androidApplicationId = "com.example.android.architecture.blueprints.todoapp"
2122

2223
def androidSdkModule = mill.define.ModuleRef(androidSdkModule0)
2324

@@ -33,7 +34,6 @@ object app extends AndroidAppKotlinModule with AndroidBuildConfig with AndroidHi
3334
mvn"androidx.core:core-ktx:1.15.0",
3435
mvn"androidx.appcompat:appcompat:1.7.0",
3536
mvn"androidx.annotation:annotation:1.9.1",
36-
mvn"org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0",
3737
mvn"com.jakewharton.timber:timber:5.0.1",
3838
mvn"androidx.test.espresso:espresso-idling-resource:3.6.1",
3939
mvn"androidx.room:room-runtime:2.6.1",
@@ -42,34 +42,30 @@ object app extends AndroidAppKotlinModule with AndroidBuildConfig with AndroidHi
4242
mvn"androidx.activity:activity-compose:1.10.0",
4343
mvn"androidx.compose.foundation:foundation:1.7.6",
4444
mvn"androidx.compose.animation:animation-core:1.7.6",
45-
mvn"androidx.compose.foundation:foundation-android:1.7.6",
4645
mvn"androidx.compose.foundation:foundation-layout:1.7.6",
4746
mvn"androidx.compose.animation:animation:1.7.6",
4847
mvn"androidx.compose.material3:material3:1.3.1",
4948
mvn"androidx.compose.material:material:1.7.6",
50-
mvn"androidx.compose.material:material-android:1.7.6",
5149
mvn"androidx.compose.material:material-icons-core:1.7.6",
52-
mvn"androidx.compose.material:material-ripple-android:1.7.6",
5350
mvn"androidx.compose.material:material-icons-extended:1.7.6",
5451
mvn"androidx.compose.ui:ui-tooling-preview:1.7.6",
5552
mvn"androidx.navigation:navigation-compose:2.8.5",
5653
mvn"androidx.compose.ui:ui:1.7.6",
57-
mvn"androidx.compose.ui:ui-android:1.7.6",
5854
mvn"androidx.compose.ui:ui-unit:1.7.6",
5955
mvn"androidx.compose.ui:ui-text:1.7.6",
56+
mvn"androidx.emoji2:emoji2:1.3.0",
6057
mvn"androidx.compose.ui:ui-graphics:1.7.6",
61-
mvn"androidx.compose.ui:ui:1.7.6",
58+
mvn"androidx.lifecycle:lifecycle-common:2.8.7",
59+
mvn"androidx.lifecycle:lifecycle-process:2.8.7",
6260
mvn"androidx.lifecycle:lifecycle-runtime-compose:2.8.7",
6361
mvn"androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7",
64-
mvn"androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.7",
65-
mvn"com.google.accompanist:accompanist-appcompat-theme:0.36.0"
66-
.exclude("androix.appcompat" -> "appcompat"),
67-
mvn"androidx.compose.material:material-icons-core-android:1.7.6",
62+
mvn"androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7",
63+
mvn"com.google.accompanist:accompanist-appcompat-theme:0.36.0",
6864
mvn"com.google.dagger:hilt-android:2.56",
6965
mvn"androidx.hilt:hilt-navigation-compose:1.2.0",
7066
mvn"com.google.accompanist:accompanist-swiperefresh:0.36.0",
71-
mvn"androidx.compose:compose-bom:2024.12.01",
72-
mvn"androidx.customview:customview-poolingcontainer:1.0.0"
67+
mvn"androidx.customview:customview-poolingcontainer:1.0.0",
68+
mvn"androidx.tracing:tracing:1.2.0"
7369
)
7470

7571
def kotlinSymbolProcessors: T[Seq[Dep]] = Seq(
@@ -83,28 +79,6 @@ object app extends AndroidAppKotlinModule with AndroidBuildConfig with AndroidHi
8379
)
8480
}
8581

86-
private val dependencyPinning = Map(
87-
"android.collection" -> "1.4.4",
88-
"androidx.lifecycle" -> "2.8.7",
89-
"androidx.compose.runtime" -> "1.7.6",
90-
"androidx.compose.material" -> "1.7.6",
91-
"androidx.compose.ui" -> "1.7.6",
92-
"androidx.appcompat" -> "1.7.0",
93-
"androidx.emoji2" -> "1.3.0",
94-
"androidx.activity" -> "1.10.0",
95-
"androidx.compose.foundation" -> "1.7.6",
96-
"androidx.compose.animation" -> "1.7.6",
97-
"androidx.collection" -> "1.4.2"
98-
)
99-
// This is a temporary fix
100-
def mapDependencies: Task[coursier.Dependency => coursier.Dependency] = Task.Anon {
101-
super.mapDependencies().andThen { (d: coursier.Dependency) =>
102-
// otherwise there are some resolution problems (version conflicts), because Coursier is using pom files only,
103-
// but Gradle is working with .module files if available
104-
dependencyPinning.get(d.module.organization.value).map(d.withVersion).getOrElse(d)
105-
}
106-
}
107-
10882
object test extends AndroidAppKotlinTests with TestModule.Junit4 {
10983
def mvnDeps = super.mvnDeps() ++ Seq(
11084
mvn"junit:junit:4.13.2"
@@ -119,6 +93,29 @@ object app extends AndroidAppKotlinModule with AndroidBuildConfig with AndroidHi
11993

12094
/** Usage
12195

122-
> ./mill app.androidDex
96+
> ./mill app.androidApk
97+
98+
> ./mill show app.createAndroidVirtualDevice
99+
...Name: test, DeviceId: medium_phone...
100+
101+
> ./mill show app.startAndroidEmulator
102+
103+
> ./mill show app.androidInstall
104+
...All files should be loaded. Notifying the device...
105+
106+
> ./mill show app.androidRun --activity com.example.android.architecture.blueprints.todoapp.TodoActivity
107+
[
108+
"Starting: Intent { cmp=com.example.android.architecture.blueprints.todoapp/.TodoActivity }",
109+
"Status: ok",
110+
"LaunchState: COLD",
111+
"Activity: com.example.android.architecture.blueprints.todoapp/.TodoActivity",
112+
"TotalTime: ...",
113+
"WaitTime: ...",
114+
"Complete"
115+
]
116+
117+
> ./mill show app.stopAndroidEmulator
118+
119+
> ./mill show app.deleteAndroidVirtualDevice
123120

124121
*/

integration/ide/gen-idea/resources/extended/idea/mill_modules/mill-build.iml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,21 @@
1212
<orderEntry type="sourceFolder" forTests="false"/>
1313
<orderEntry type="library" name="scala-SDK-3.7.0" level="project"/>
1414
<orderEntry type="library" name="aircompressor-0.27.jar" level="project"/>
15-
<orderEntry type="library" name="cache-util-2.1.25-M11.jar" level="project"/>
15+
<orderEntry type="library" name="cache-util-2.1.25-M13.jar" level="project"/>
1616
<orderEntry type="library" name="commons-codec-1.17.0.jar" level="project"/>
1717
<orderEntry type="library" name="commons-compress-1.26.2.jar" level="project"/>
1818
<orderEntry type="library" name="commons-io-2.18.0.jar" level="project"/>
1919
<orderEntry type="library" name="commons-lang3-3.14.0.jar" level="project"/>
2020
<orderEntry type="library" name="concurrent-reference-hash-map-1.1.0.jar" level="project"/>
2121
<orderEntry type="library" name="config_2.13-1.1.3.jar" level="project"/>
22-
<orderEntry type="library" name="coursier-cache_2.13-2.1.25-M11.jar" level="project"/>
23-
<orderEntry type="library" name="coursier-core_2.13-2.1.25-M11.jar" level="project"/>
24-
<orderEntry type="library" name="coursier-env_2.13-2.1.25-M11.jar" level="project"/>
25-
<orderEntry type="library" name="coursier-exec-2.1.25-M11.jar" level="project"/>
26-
<orderEntry type="library" name="coursier-jvm_2.13-2.1.25-M11.jar" level="project"/>
27-
<orderEntry type="library" name="coursier-proxy-setup-2.1.25-M11.jar" level="project"/>
28-
<orderEntry type="library" name="coursier-util_2.13-2.1.25-M11.jar" level="project"/>
29-
<orderEntry type="library" name="coursier_2.13-2.1.25-M11.jar" level="project"/>
22+
<orderEntry type="library" name="coursier-cache_2.13-2.1.25-M13.jar" level="project"/>
23+
<orderEntry type="library" name="coursier-core_2.13-2.1.25-M13.jar" level="project"/>
24+
<orderEntry type="library" name="coursier-env_2.13-2.1.25-M13.jar" level="project"/>
25+
<orderEntry type="library" name="coursier-exec-2.1.25-M13.jar" level="project"/>
26+
<orderEntry type="library" name="coursier-jvm_2.13-2.1.25-M13.jar" level="project"/>
27+
<orderEntry type="library" name="coursier-proxy-setup-2.1.25-M13.jar" level="project"/>
28+
<orderEntry type="library" name="coursier-util_2.13-2.1.25-M13.jar" level="project"/>
29+
<orderEntry type="library" name="coursier_2.13-2.1.25-M13.jar" level="project"/>
3030
<orderEntry type="library" name="dependency_2.13-0.3.2.jar" level="project"/>
3131
<orderEntry type="library" name="fansi_3-0.5.0.jar" level="project"/>
3232
<orderEntry type="library" name="fastparse_3-3.1.1.jar" level="project"/>
@@ -116,6 +116,6 @@
116116
<orderEntry type="library" name="windows-jni-utils-0.3.3.jar" level="project"/>
117117
<orderEntry type="library" name="xbean-reflect-3.7.jar" level="project"/>
118118
<orderEntry type="library" scope="RUNTIME" name="xz-1.9.jar" level="project"/>
119-
<orderEntry type="library" name="zstd-jni-1.5.7-2.jar" level="project"/>
119+
<orderEntry type="library" name="zstd-jni-1.5.7-3.jar" level="project"/>
120120
</component>
121121
</module>

integration/ide/gen-idea/resources/extended/idea/mill_modules/mill-build.mill-build.iml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,21 @@
1616
<orderEntry type="library" name="aircompressor-0.27.jar" level="project"/>
1717
<orderEntry type="library" name="asm-9.8.jar" level="project"/>
1818
<orderEntry type="library" name="asm-tree-9.8.jar" level="project"/>
19-
<orderEntry type="library" name="cache-util-2.1.25-M11.jar" level="project"/>
19+
<orderEntry type="library" name="cache-util-2.1.25-M13.jar" level="project"/>
2020
<orderEntry type="library" name="commons-codec-1.17.0.jar" level="project"/>
2121
<orderEntry type="library" name="commons-compress-1.26.2.jar" level="project"/>
2222
<orderEntry type="library" name="commons-io-2.18.0.jar" level="project"/>
2323
<orderEntry type="library" name="commons-lang3-3.14.0.jar" level="project"/>
2424
<orderEntry type="library" name="concurrent-reference-hash-map-1.1.0.jar" level="project"/>
2525
<orderEntry type="library" name="config_2.13-1.1.3.jar" level="project"/>
26-
<orderEntry type="library" name="coursier-cache_2.13-2.1.25-M11.jar" level="project"/>
27-
<orderEntry type="library" name="coursier-core_2.13-2.1.25-M11.jar" level="project"/>
28-
<orderEntry type="library" name="coursier-env_2.13-2.1.25-M11.jar" level="project"/>
29-
<orderEntry type="library" name="coursier-exec-2.1.25-M11.jar" level="project"/>
30-
<orderEntry type="library" name="coursier-jvm_2.13-2.1.25-M11.jar" level="project"/>
31-
<orderEntry type="library" name="coursier-proxy-setup-2.1.25-M11.jar" level="project"/>
32-
<orderEntry type="library" name="coursier-util_2.13-2.1.25-M11.jar" level="project"/>
33-
<orderEntry type="library" name="coursier_2.13-2.1.25-M11.jar" level="project"/>
26+
<orderEntry type="library" name="coursier-cache_2.13-2.1.25-M13.jar" level="project"/>
27+
<orderEntry type="library" name="coursier-core_2.13-2.1.25-M13.jar" level="project"/>
28+
<orderEntry type="library" name="coursier-env_2.13-2.1.25-M13.jar" level="project"/>
29+
<orderEntry type="library" name="coursier-exec-2.1.25-M13.jar" level="project"/>
30+
<orderEntry type="library" name="coursier-jvm_2.13-2.1.25-M13.jar" level="project"/>
31+
<orderEntry type="library" name="coursier-proxy-setup-2.1.25-M13.jar" level="project"/>
32+
<orderEntry type="library" name="coursier-util_2.13-2.1.25-M13.jar" level="project"/>
33+
<orderEntry type="library" name="coursier_2.13-2.1.25-M13.jar" level="project"/>
3434
<orderEntry type="library" name="dependency_2.13-0.3.2.jar" level="project"/>
3535
<orderEntry type="library" name="fansi_3-0.5.0.jar" level="project"/>
3636
<orderEntry type="library" name="fastparse_3-3.1.1.jar" level="project"/>
@@ -118,6 +118,6 @@
118118
<orderEntry type="library" name="windows-jni-utils-0.3.3.jar" level="project"/>
119119
<orderEntry type="library" name="xbean-reflect-3.7.jar" level="project"/>
120120
<orderEntry type="library" scope="RUNTIME" name="xz-1.9.jar" level="project"/>
121-
<orderEntry type="library" name="zstd-jni-1.5.7-2.jar" level="project"/>
121+
<orderEntry type="library" name="zstd-jni-1.5.7-3.jar" level="project"/>
122122
</component>
123123
</module>

0 commit comments

Comments
 (0)