Skip to content

Commit d597271

Browse files
committed
SCANNERAPI-176 Remove temporary file on exit
1 parent 1cda161 commit d597271

5 files changed

Lines changed: 28 additions & 8 deletions

File tree

api/src/main/java/org/sonarsource/scanner/api/EmbeddedScanner.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
*/
2020
package org.sonarsource.scanner.api;
2121

22+
import java.io.IOException;
2223
import java.nio.charset.Charset;
2324
import java.util.HashMap;
2425
import java.util.HashSet;
@@ -119,11 +120,15 @@ public String serverVersion() {
119120

120121
public void execute(Map<String, String> taskProps) {
121122
checkLauncherExists();
122-
Map<String, String> allProps = new HashMap<>();
123-
allProps.putAll(globalProperties);
124-
allProps.putAll(taskProps);
125-
initAnalysisProperties(allProps);
126-
doExecute(allProps);
123+
try (IsolatedLauncherFactory launcherFactoryToBeClosed = launcherFactory) {
124+
Map<String, String> allProps = new HashMap<>();
125+
allProps.putAll(globalProperties);
126+
allProps.putAll(taskProps);
127+
initAnalysisProperties(allProps);
128+
doExecute(allProps);
129+
} catch (IOException e) {
130+
throw new IllegalStateException(e.getMessage(), e);
131+
}
127132
}
128133

129134
private void initGlobalDefaultValues() {

api/src/main/java/org/sonarsource/scanner/api/internal/IsolatedLauncherFactory.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,22 @@
1919
*/
2020
package org.sonarsource.scanner.api.internal;
2121

22+
import java.io.Closeable;
2223
import java.io.File;
24+
import java.io.IOException;
2325
import java.security.AccessController;
2426
import java.security.PrivilegedAction;
2527
import java.util.List;
2628
import java.util.Map;
2729
import org.sonarsource.scanner.api.internal.batch.IsolatedLauncher;
2830
import org.sonarsource.scanner.api.internal.cache.Logger;
2931

30-
public class IsolatedLauncherFactory {
32+
public class IsolatedLauncherFactory implements Closeable {
3133
static final String ISOLATED_LAUNCHER_IMPL = "org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher";
3234
private final TempCleaning tempCleaning;
3335
private final String launcherImplClassName;
3436
private final Logger logger;
37+
private IsolatedClassloader cl;
3538

3639
/**
3740
* For unit tests
@@ -46,7 +49,7 @@ public IsolatedLauncherFactory(Logger logger) {
4649
this(ISOLATED_LAUNCHER_IMPL, new TempCleaning(logger), logger);
4750
}
4851

49-
private ClassLoader createClassLoader(List<File> jarFiles, ClassloadRules maskRules) {
52+
private IsolatedClassloader createClassLoader(List<File> jarFiles, ClassloadRules maskRules) {
5053
IsolatedClassloader classloader = new IsolatedClassloader(getClass().getClassLoader(), maskRules);
5154
classloader.addFiles(jarFiles);
5255

@@ -72,7 +75,7 @@ IsolatedLauncher createLauncher(final JarDownloader jarDownloader, final Classlo
7275
try {
7376
List<File> jarFiles = jarDownloader.download();
7477
logger.debug("Create isolated classloader...");
75-
ClassLoader cl = createClassLoader(jarFiles, rules);
78+
cl = createClassLoader(jarFiles, rules);
7679
IsolatedLauncher objProxy = IsolatedLauncherProxy.create(cl, IsolatedLauncher.class, launcherImplClassName, logger);
7780
tempCleaning.clean();
7881

@@ -83,4 +86,11 @@ IsolatedLauncher createLauncher(final JarDownloader jarDownloader, final Classlo
8386
}
8487
});
8588
}
89+
90+
@Override
91+
public void close() throws IOException {
92+
if (cl != null) {
93+
cl.close();
94+
}
95+
}
8696
}

api/src/main/java/org/sonarsource/scanner/api/internal/JarExtractor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public Path extractToTemp(String filenameWithoutSuffix) {
3232
URL url = getClass().getResource("/" + filename);
3333
try {
3434
Path copy = Files.createTempFile(filenameWithoutSuffix, ".jar");
35+
copy.toFile().deleteOnExit();
3536
try (InputStream in = url.openStream()) {
3637
Files.copy(in, copy, StandardCopyOption.REPLACE_EXISTING);
3738
}

api/src/test/java/org/sonarsource/scanner/api/internal/cache/FileCacheBuilderTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@
2222
import java.io.File;
2323
import java.io.IOException;
2424
import java.nio.file.Files;
25+
import org.apache.commons.lang.SystemUtils;
2526
import org.junit.Rule;
2627
import org.junit.Test;
2728
import org.junit.rules.TemporaryFolder;
2829

2930
import static org.assertj.core.api.Assertions.assertThat;
31+
import static org.junit.Assume.assumeFalse;
3032
import static org.mockito.Mockito.mock;
3133

3234
public class FileCacheBuilderTest {
@@ -54,6 +56,7 @@ public void user_home_property_can_be_null() {
5456

5557
@Test
5658
public void user_home_property_can_be_a_symlink() throws IOException {
59+
assumeFalse(SystemUtils.IS_OS_WINDOWS);
5760
File realSonarHome = temp.newFolder();
5861
File symlink = temp.newFolder();
5962
symlink.delete();

batch-interface/src/main/java/org/sonarsource/scanner/api/internal/batch/IsolatedLauncher.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ public interface IsolatedLauncher {
2525
void execute(Map<String, String> properties, LogOutput logOutput);
2626

2727
String getVersion();
28+
2829
}

0 commit comments

Comments
 (0)