[JPS] Ignore classpath from facets to exclude jars from gradle build

Reimport after `./gradlew build` adds jars from gradle's `build/libs` to facet's classpath. That causes problems with JPS build, because it doesn't see changes in out folder, but see unchanged jar, so changes don't apply.

#KT-51873 Fixed

Merge-request: KT-MR-6018
Merged-by: Aleksei Cherepanov <aleksei.cherepanov@jetbrains.com>
This commit is contained in:
Aleksei.Cherepanov
2022-04-18 11:20:40 +00:00
committed by Space
parent e0029b14ee
commit bdf229bc5c
8 changed files with 101 additions and 0 deletions
@@ -71,6 +71,8 @@ import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
import java.net.URLClassLoader
import java.nio.file.Files
import java.nio.file.StandardCopyOption
import java.util.*
import java.util.zip.ZipOutputStream
@@ -986,6 +988,31 @@ open class KotlinJpsBuildTest : KotlinJpsBuildTestBase() {
checkWhen(emptyArray(), null, packageClasses("kotlinProject", "src/test1.kt", "Test1Kt"))
}
fun testBuildAfterGdwBuild() {
initProject(JVM_FULL_RUNTIME)
findModule("module2").let {
val facet = KotlinFacetSettings()
facet.useProjectSettings = false
facet.compilerArguments = K2JVMCompilerArguments()
val libraryName = "module1-1.0-SNAPSHOT"
val libraryJar = MockLibraryUtilExt.compileJvmLibraryToJar(workDir.resolve("module1AsLib").absolutePath, libraryName)
val module1Lib = this.workDir.resolve("module1").resolve("build").resolve("libs").resolve("$libraryName.jar")
Files.createDirectories(module1Lib.parentFile.toPath())
Files.copy(libraryJar.toPath(), module1Lib.toPath(), StandardCopyOption.REPLACE_EXISTING)
assert(module1Lib.exists())
(facet.compilerArguments as K2JVMCompilerArguments).classpath = module1Lib.path
it.container.setChild(
JpsKotlinFacetModuleExtension.KIND,
JpsKotlinFacetModuleExtension(facet)
)
}
buildAllModules().assertSuccessful()
}
private fun BuildResult.checkErrors() {
val actualErrors = getMessages(BuildMessage.Kind.ERROR)
.map { it as CompilerMessage }