diff --git a/.idea/modules.xml b/.idea/modules.xml
index 53cee3aaa102..a8ebbfaf0f47 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -1067,6 +1067,7 @@
+
diff --git a/build/bazel-generated-file-list.txt b/build/bazel-generated-file-list.txt
index a9d1505028da..23a49e051135 100644
--- a/build/bazel-generated-file-list.txt
+++ b/build/bazel-generated-file-list.txt
@@ -494,6 +494,7 @@ libraries/kotlinx/serialization/cbor
libraries/kotlinx/serialization/core
libraries/kotlinx/serialization/json
libraries/kotlinx/serialization/protobuf
+libraries/kryo2
libraries/kryo5
libraries/ktor/client
libraries/ktor/client-cio
diff --git a/lib/BUILD.bazel b/lib/BUILD.bazel
index 697835983d01..6916e4c78a08 100644
--- a/lib/BUILD.bazel
+++ b/lib/BUILD.bazel
@@ -12444,6 +12444,51 @@ jvm_import(
visibility = ["//visibility:public"],
)
+copy_file(
+ name = "com.esotericsoftware.kryo/kryo-2.24.0.jar_copy",
+ src = "@com_esotericsoftware_kryo-kryo-2_24_0_http//file",
+ out = "com.esotericsoftware.kryo/kryo-2.24.0.jar",
+ allow_symlink = True,
+ visibility = ["//visibility:public"],
+)
+
+copy_file(
+ name = "com.esotericsoftware.minlog/minlog-1.2.jar_copy",
+ src = "@com_esotericsoftware_minlog-minlog-1_2_http//file",
+ out = "com.esotericsoftware.minlog/minlog-1.2.jar",
+ allow_symlink = True,
+ visibility = ["//visibility:public"],
+)
+
+java_library(
+ name = "libraries-kryo2-_kryo",
+ visibility = ["//visibility:public"],
+ exports = [
+ # do not sort,
+ ":com_esotericsoftware_kryo-kryo-2_24_0_http_import",
+ ":com_esotericsoftware_minlog-minlog-1_2_http_import",
+ ],
+)
+
+jvm_import(
+ name = "com_esotericsoftware_kryo-kryo-2_24_0_http_import",
+ jar = "@com_esotericsoftware_kryo-kryo-2_24_0_http//file",
+ source_jar = "@com_esotericsoftware_kryo-kryo-2_24_0-sources_http//file",
+)
+
+jvm_import(
+ name = "com_esotericsoftware_minlog-minlog-1_2_http_import",
+ jar = "@com_esotericsoftware_minlog-minlog-1_2_http//file",
+ source_jar = "@com_esotericsoftware_minlog-minlog-1_2-sources_http//file",
+)
+
+jvm_import(
+ name = "libraries-kryo2-_objenesis",
+ jar = "@org_objenesis-objenesis-3_4_http//file",
+ source_jar = "@org_objenesis-objenesis-3_4-sources_http//file",
+ visibility = ["//visibility:public"],
+)
+
copy_file(
name = "com.esotericsoftware/kryo5-5.6.0.jar_copy",
src = "@com_esotericsoftware-kryo5-5_6_0_http//file",
diff --git a/lib/MODULE.bazel b/lib/MODULE.bazel
index f0456b17ff2d..bbc96a6cae82 100644
--- a/lib/MODULE.bazel
+++ b/lib/MODULE.bazel
@@ -9772,6 +9772,34 @@ http_file(
url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-serialization-protobuf-jvm/1.9.0/kotlinx-serialization-protobuf-jvm-1.9.0-sources.jar",
)
+http_file(
+ name = "com_esotericsoftware_kryo-kryo-2_24_0_http",
+ downloaded_file_path = "kryo-2.24.0.jar",
+ sha256 = "7e56b32c635058f9aa2820f88919ab702d029cbcd15285da9992e36cc0ae52f2",
+ url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/com/esotericsoftware/kryo/kryo/2.24.0/kryo-2.24.0.jar",
+)
+
+http_file(
+ name = "com_esotericsoftware_minlog-minlog-1_2_http",
+ downloaded_file_path = "minlog-1.2.jar",
+ sha256 = "a678cb1aa8f5d03d901c992c75741841d98a9bc3d55dad02e84d65315c4e60f2",
+ url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/com/esotericsoftware/minlog/minlog/1.2/minlog-1.2.jar",
+)
+
+http_file(
+ name = "com_esotericsoftware_kryo-kryo-2_24_0-sources_http",
+ downloaded_file_path = "kryo-2.24.0-sources.jar",
+ sha256 = "617593f9253ee4246db001641630359df8a8ed9f306a1590e54d6cc091b37439",
+ url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/com/esotericsoftware/kryo/kryo/2.24.0/kryo-2.24.0-sources.jar",
+)
+
+http_file(
+ name = "com_esotericsoftware_minlog-minlog-1_2-sources_http",
+ downloaded_file_path = "minlog-1.2-sources.jar",
+ sha256 = "7c9f5c5b4a541ed9669de73bdc8afbade8cf45e2bbe36c1bd420f74533eedaa8",
+ url = "https://cache-redirector.jetbrains.com/repo1.maven.org/maven2/com/esotericsoftware/minlog/minlog/1.2/minlog-1.2-sources.jar",
+)
+
http_file(
name = "com_esotericsoftware-kryo5-5_6_0_http",
downloaded_file_path = "kryo5-5.6.0.jar",
diff --git a/libraries/kryo2/BUILD.bazel b/libraries/kryo2/BUILD.bazel
new file mode 100644
index 000000000000..cb63b7fa7a3e
--- /dev/null
+++ b/libraries/kryo2/BUILD.bazel
@@ -0,0 +1,55 @@
+load("@rules_jvm//:jvm.bzl", "jvm_library")
+
+### auto-generated section `build intellij.libraries.kryo2` start
+
+jvm_library(
+ name = "kryo2",
+ srcs = glob(
+ [],
+ allow_empty = True,
+ ),
+ module_name = "intellij.libraries.kryo2",
+ resource_strip_prefix = "resources",
+ resources = glob(
+ ["resources/**/*"],
+ ),
+ visibility = ["//visibility:public"],
+ exports = [
+ # do not sort,
+ "@lib//:libraries-kryo2-_kryo",
+ "@lib//:libraries-kryo2-_objenesis",
+ ],
+ runtime_deps = [
+ # do not sort,
+ "@lib//:libraries-kryo2-_kryo",
+ "@lib//:libraries-kryo2-_objenesis",
+ ],
+)
+
+jvm_library(
+ name = "kryo2_test_lib",
+ testonly = True,
+ srcs = glob(
+ [],
+ allow_empty = True,
+ ),
+ kotlinc_opts = "@community//:k8",
+ module_name = "intellij.libraries.kryo2",
+ visibility = ["//visibility:public"],
+ exports = [
+ # do not sort,
+ "@lib//:libraries-kryo2-_kryo",
+ "@lib//:libraries-kryo2-_objenesis",
+ ],
+ runtime_deps = [":kryo2"],
+)
+### auto-generated section `build intellij.libraries.kryo2` end
+
+### auto-generated section `iml intellij.libraries.kryo2` start
+exports_files(
+ [
+ "intellij.libraries.kryo2.iml",
+ ],
+ visibility = ["//visibility:public"],
+)
+### auto-generated section `iml intellij.libraries.kryo2` end
diff --git a/libraries/kryo2/intellij.libraries.kryo2.iml b/libraries/kryo2/intellij.libraries.kryo2.iml
new file mode 100644
index 000000000000..cd9c1dc84ade
--- /dev/null
+++ b/libraries/kryo2/intellij.libraries.kryo2.iml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 7e56b32c635058f9aa2820f88919ab702d029cbcd15285da9992e36cc0ae52f2
+
+
+ a678cb1aa8f5d03d901c992c75741841d98a9bc3d55dad02e84d65315c4e60f2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 95488102feaf2e2858adf6b299353677dac6c15294006f8ed1c5556f8e3cd251
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/kryo2/module-content.yaml b/libraries/kryo2/module-content.yaml
new file mode 100644
index 000000000000..e9d528bd73e9
--- /dev/null
+++ b/libraries/kryo2/module-content.yaml
@@ -0,0 +1,7 @@
+- name: dist.all/lib/intellij.libraries.kryo2.jar
+ modules:
+ - name: intellij.libraries.kryo2
+ libraries:
+ Kryo:
+ - name: $MAVEN_REPOSITORY$/com/esotericsoftware/kryo/kryo/2/kryo-2.jar
+ - name: $MAVEN_REPOSITORY$/com/esotericsoftware/minlog/minlog/1/minlog-1.jar
diff --git a/libraries/kryo2/resources/intellij.libraries.kryo2.xml b/libraries/kryo2/resources/intellij.libraries.kryo2.xml
new file mode 100644
index 000000000000..aa52f3dbdcd0
--- /dev/null
+++ b/libraries/kryo2/resources/intellij.libraries.kryo2.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/LibraryFilePacking.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/LibraryFilePacking.kt
index 6cb85c2eca10..1ddc45e3858d 100644
--- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/LibraryFilePacking.kt
+++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/LibraryFilePacking.kt
@@ -29,7 +29,6 @@ private val agentLibrariesNotForcedInSeparateJars = listOf(
fun isSeparateLibraryJar(fileName: String): Boolean {
return fileName.endsWith("-rt.jar") ||
fileName.startsWith("byte-buddy-") ||
- fileName.startsWith("objenesis-") ||
(fileName.contains("-agent") && agentLibrariesNotForcedInSeparateJars.none { fileName.contains(it) }) ||
fileName.startsWith("maven-")
}
diff --git a/platform/build-scripts/tests/testSrc/org/jetbrains/intellij/build/impl/LibraryFileCopyTrackerTest.kt b/platform/build-scripts/tests/testSrc/org/jetbrains/intellij/build/impl/LibraryFileCopyTrackerTest.kt
index b6a76f5b6adf..edf5811bbc4a 100644
--- a/platform/build-scripts/tests/testSrc/org/jetbrains/intellij/build/impl/LibraryFileCopyTrackerTest.kt
+++ b/platform/build-scripts/tests/testSrc/org/jetbrains/intellij/build/impl/LibraryFileCopyTrackerTest.kt
@@ -31,11 +31,12 @@ internal class LibraryFileCopyTrackerTest {
fun `detects jars packed separately`() {
assertThat(isSeparateLibraryJar("mockk-agent-1.14.5.jar")).isTrue()
assertThat(isSeparateLibraryJar("byte-buddy-1.17.7.jar")).isTrue()
- assertThat(isSeparateLibraryJar("objenesis-3.4.jar")).isTrue()
assertThat(isSeparateLibraryJar("kotlin-reflect-rt.jar")).isTrue()
assertThat(isSeparateLibraryJar("maven-resolver-provider.jar")).isTrue()
assertThat(isSeparateLibraryJar("ideformer-agent.jar")).isFalse()
assertThat(isSeparateLibraryJar("code-agents-agent.jar")).isFalse()
assertThat(isSeparateLibraryJar("kotlin-stdlib.jar")).isFalse()
+ // an ordinary library: it must stay inside the content module that wraps it, or that module's jar ends up empty
+ assertThat(isSeparateLibraryJar("objenesis-3.4.jar")).isFalse()
}
}