diff --git a/analyzer/src/main/kotlin/PackageManager.kt b/analyzer/src/main/kotlin/PackageManager.kt index 2ba08988832bd..9fd244470b3b1 100644 --- a/analyzer/src/main/kotlin/PackageManager.kt +++ b/analyzer/src/main/kotlin/PackageManager.kt @@ -19,6 +19,7 @@ package org.ossreviewtoolkit.analyzer +import java.io.Closeable import java.io.File import java.nio.file.FileSystems import java.nio.file.Path @@ -62,7 +63,7 @@ abstract class PackageManager( val analysisRoot: File, val analyzerConfig: AnalyzerConfiguration, val repoConfig: RepositoryConfiguration -) { +) : Closeable { companion object { private val PACKAGE_MANAGER_DIRECTORIES = setOf( // Ignore intermediate build system directories. @@ -361,6 +362,11 @@ abstract class PackageManager( } } } + + /** + * [PackageManager] implementations should override this method if they need to close resources. + */ + override fun close() = Unit } /** diff --git a/plugins/commands/analyzer/src/main/kotlin/AnalyzerCommand.kt b/plugins/commands/analyzer/src/main/kotlin/AnalyzerCommand.kt index da8120df37dec..15a56f229a4c5 100644 --- a/plugins/commands/analyzer/src/main/kotlin/AnalyzerCommand.kt +++ b/plugins/commands/analyzer/src/main/kotlin/AnalyzerCommand.kt @@ -228,5 +228,9 @@ class AnalyzerCommand : OrtCommand( val issues = analyzerRun.result.getAllIssues().flatMap { it.value } SeverityStatsPrinter(terminal, resolutionProvider).stats(issues) .print().conclude(ortConfig.severeIssueThreshold, 2) + + for (packageManager in info.managedFiles.keys) { + packageManager.close() + } } } diff --git a/plugins/package-managers/gradle/src/main/kotlin/Gradle.kt b/plugins/package-managers/gradle/src/main/kotlin/Gradle.kt index 090a72e75d655..430b7631e2c2e 100644 --- a/plugins/package-managers/gradle/src/main/kotlin/Gradle.kt +++ b/plugins/package-managers/gradle/src/main/kotlin/Gradle.kt @@ -290,4 +290,9 @@ class Gradle( } } } + + override fun close() { + // Silently close the [MvnSupport] instance. + maven.use {} + } } diff --git a/plugins/package-managers/maven/src/main/kotlin/Maven.kt b/plugins/package-managers/maven/src/main/kotlin/Maven.kt index 461164ccba926..32fe7a536a7fb 100644 --- a/plugins/package-managers/maven/src/main/kotlin/Maven.kt +++ b/plugins/package-managers/maven/src/main/kotlin/Maven.kt @@ -164,6 +164,11 @@ class Maven( return listOf(ProjectAnalyzerResult(project, emptySet(), issues)) } + + override fun close() { + // Silently close the [MvnSupport] instance. + mvn.use {} + } } /** diff --git a/plugins/package-managers/maven/src/main/kotlin/utils/MavenSupport.kt b/plugins/package-managers/maven/src/main/kotlin/utils/MavenSupport.kt index 9e32aad1a027e..3745997160088 100644 --- a/plugins/package-managers/maven/src/main/kotlin/utils/MavenSupport.kt +++ b/plugins/package-managers/maven/src/main/kotlin/utils/MavenSupport.kt @@ -19,6 +19,7 @@ package org.ossreviewtoolkit.plugins.packagemanagers.maven.utils +import java.io.Closeable import java.io.File import java.net.URI @@ -108,7 +109,7 @@ fun Artifact.identifier() = "$groupId:$artifactId:$version" private val File?.safePath: String get() = this?.invariantSeparatorsPath ?: "" -class MavenSupport(private val workspaceReader: WorkspaceReader) { +class MavenSupport(private val workspaceReader: WorkspaceReader) : Closeable { companion object { private val PACKAGING_TYPES = setOf( // Core packaging types, see https://maven.apache.org/pom.html#packaging. @@ -814,6 +815,10 @@ class MavenSupport(private val workspaceReader: WorkspaceReader) { legacySupport.session = null } } + + override fun close() { + remoteArtifactCache.close() + } } /** diff --git a/plugins/package-managers/sbt/src/funTest/assets/projects/target-scala-2.12-projects_2.12-0.1.0-SNAPSHOT.pom b/plugins/package-managers/sbt/src/funTest/assets/projects/target-scala-2.12-projects_2.12-0.1.0-SNAPSHOT.pom new file mode 100644 index 0000000000000..cd2af3b6ea9fa --- /dev/null +++ b/plugins/package-managers/sbt/src/funTest/assets/projects/target-scala-2.12-projects_2.12-0.1.0-SNAPSHOT.pom @@ -0,0 +1,20 @@ + + + 4.0.0 + default + projects_2.12 + jar + projects + 0.1.0-SNAPSHOT + projects + + default + + + + org.scala-lang + scala-library + 2.12.16 + + + \ No newline at end of file diff --git a/plugins/package-managers/sbt/src/funTest/assets/projects/target/streams/_global/ivyConfiguration/_global/streams/out b/plugins/package-managers/sbt/src/funTest/assets/projects/target/streams/_global/ivyConfiguration/_global/streams/out new file mode 100644 index 0000000000000..ffaebab0d3b74 --- /dev/null +++ b/plugins/package-managers/sbt/src/funTest/assets/projects/target/streams/_global/ivyConfiguration/_global/streams/out @@ -0,0 +1,3 @@ +[debug] Other repositories: +[debug] Default repositories: +[debug] Using inline dependencies specified in Scala. diff --git a/plugins/package-managers/sbt/src/funTest/assets/projects/target/streams/_global/ivySbt/_global/streams/out b/plugins/package-managers/sbt/src/funTest/assets/projects/target/streams/_global/ivySbt/_global/streams/out new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/plugins/package-managers/sbt/src/funTest/assets/projects/target/streams/_global/makePom/_global/streams/out b/plugins/package-managers/sbt/src/funTest/assets/projects/target/streams/_global/makePom/_global/streams/out new file mode 100644 index 0000000000000..fb98ecbdc21c4 --- /dev/null +++ b/plugins/package-managers/sbt/src/funTest/assets/projects/target/streams/_global/makePom/_global/streams/out @@ -0,0 +1 @@ +[info] Wrote /home/tn/workspace/netomi/ort/plugins/package-managers/sbt/src/funTest/assets/projects/target/scala-2.12/projects_2.12-0.1.0-SNAPSHOT.pom diff --git a/plugins/package-managers/sbt/src/funTest/assets/projects/target/streams/_global/moduleSettings/_global/streams/out b/plugins/package-managers/sbt/src/funTest/assets/projects/target/streams/_global/moduleSettings/_global/streams/out new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/plugins/package-managers/sbt/src/funTest/assets/projects/target/streams/_global/projectDescriptors/_global/streams/out b/plugins/package-managers/sbt/src/funTest/assets/projects/target/streams/_global/projectDescriptors/_global/streams/out new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/utils/common/src/main/kotlin/DiskCache.kt b/utils/common/src/main/kotlin/DiskCache.kt index c08825d1cf71f..2b96dddafe5c1 100644 --- a/utils/common/src/main/kotlin/DiskCache.kt +++ b/utils/common/src/main/kotlin/DiskCache.kt @@ -21,6 +21,7 @@ package org.ossreviewtoolkit.utils.common import com.jakewharton.disklrucache.DiskLruCache +import java.io.Closeable import java.io.File import java.io.IOException @@ -46,7 +47,7 @@ class DiskCache( * Duration in seconds that cache entries are valid. */ private val maxCacheEntryAgeInSeconds: Long -) { +) : Closeable { companion object { const val INDEX_FULL_KEY = 0 const val INDEX_TIMESTAMP = 1 @@ -144,4 +145,8 @@ class DiskCache( } private fun currentTimeInSeconds() = System.currentTimeMillis() / 1000L + + override fun close() { + diskLruCache.close() + } }