Skip to content

Commit a408a1e

Browse files
Closing class loaders in build plugins (#296)
1 parent 0d6a1e6 commit a408a1e

File tree

2 files changed

+87
-85
lines changed
  • typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle
  • typescript-generator-maven-plugin/src/main/java/cz/habarta/typescript/generator/maven

2 files changed

+87
-85
lines changed

typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle/GenerateTask.java

Lines changed: 76 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -97,96 +97,95 @@ public void generate() throws Exception {
9797

9898
// class loader
9999
final List<URL> urls = new ArrayList<>();
100-
101100
for (Task task : getProject().getTasks()) {
102101
if (task.getName().startsWith("compile")) {
103102
for (File file : task.getOutputs().getFiles()) {
104103
urls.add(file.toURI().toURL());
105104
}
106105
}
107106
}
108-
109107
for (File file : getProject().getConfigurations().getAt("compile").getFiles()) {
110108
urls.add(file.toURI().toURL());
111109
}
112110

113-
final URLClassLoader classLoader = Settings.createClassLoader(getProject().getName(), urls.toArray(new URL[0]), Thread.currentThread().getContextClassLoader());
111+
try (URLClassLoader classLoader = Settings.createClassLoader(getProject().getName(), urls.toArray(new URL[0]), Thread.currentThread().getContextClassLoader())) {
114112

115-
// Settings
116-
final Settings settings = new Settings();
117-
if (outputFileType != null) {
118-
settings.outputFileType = outputFileType;
119-
}
120-
settings.outputKind = outputKind;
121-
settings.module = module;
122-
settings.namespace = namespace;
123-
settings.mapPackagesToNamespaces = mapPackagesToNamespaces;
124-
settings.umdNamespace = umdNamespace;
125-
settings.moduleDependencies = moduleDependencies;
126-
settings.setExcludeFilter(excludeClasses, excludeClassPatterns);
127-
settings.jsonLibrary = jsonLibrary;
128-
settings.setJackson2Configuration(classLoader, jackson2Configuration);
129-
settings.declarePropertiesAsOptional = declarePropertiesAsOptional;
130-
settings.optionalProperties = optionalProperties;
131-
settings.optionalPropertiesDeclaration = optionalPropertiesDeclaration;
132-
settings.declarePropertiesAsReadOnly = declarePropertiesAsReadOnly;
133-
settings.removeTypeNamePrefix = removeTypeNamePrefix;
134-
settings.removeTypeNameSuffix = removeTypeNameSuffix;
135-
settings.addTypeNamePrefix = addTypeNamePrefix;
136-
settings.addTypeNameSuffix = addTypeNameSuffix;
137-
settings.customTypeNaming = Settings.convertToMap(customTypeNaming);
138-
settings.customTypeNamingFunction = customTypeNamingFunction;
139-
settings.referencedFiles = referencedFiles;
140-
settings.importDeclarations = importDeclarations;
141-
settings.customTypeMappings = Settings.convertToMap(customTypeMappings);
142-
settings.mapDate = mapDate;
143-
settings.mapEnum = mapEnum;
144-
settings.nonConstEnums = nonConstEnums;
145-
settings.loadNonConstEnumAnnotations(classLoader, nonConstEnumAnnotations);
146-
settings.mapClasses = mapClasses;
147-
settings.mapClassesAsClassesPatterns = mapClassesAsClassesPatterns;
148-
settings.disableTaggedUnions = disableTaggedUnions;
149-
settings.ignoreSwaggerAnnotations = ignoreSwaggerAnnotations;
150-
settings.generateJaxrsApplicationInterface = generateJaxrsApplicationInterface;
151-
settings.generateJaxrsApplicationClient = generateJaxrsApplicationClient;
152-
settings.jaxrsNamespacing = jaxrsNamespacing;
153-
settings.setJaxrsNamespacingAnnotation(classLoader, jaxrsNamespacingAnnotation);
154-
settings.restResponseType = restResponseType;
155-
settings.setRestOptionsType(restOptionsType);
156-
settings.loadCustomTypeProcessor(classLoader, customTypeProcessor);
157-
settings.sortDeclarations = sortDeclarations;
158-
settings.sortTypeDeclarations = sortTypeDeclarations;
159-
settings.noFileComment = noFileComment;
160-
settings.noTslintDisable = noTslintDisable;
161-
settings.javadocXmlFiles = javadocXmlFiles;
162-
settings.loadExtensions(classLoader, Utils.concat(extensionClasses, extensions), extensionsWithConfiguration);
163-
settings.loadIncludePropertyAnnotations(classLoader, includePropertyAnnotations);
164-
settings.loadExcludePropertyAnnotations(classLoader, excludePropertyAnnotations);
165-
settings.loadOptionalAnnotations(classLoader, optionalAnnotations);
166-
settings.generateInfoJson = generateInfoJson;
167-
settings.generateNpmPackageJson = generateNpmPackageJson;
168-
settings.npmName = npmName == null && generateNpmPackageJson ? getProject().getName() : npmName;
169-
settings.npmVersion = npmVersion == null && generateNpmPackageJson ? settings.getDefaultNpmVersion() : npmVersion;
170-
settings.npmBuildScript = npmBuildScript;
171-
settings.setStringQuotes(stringQuotes);
172-
settings.setIndentString(indentString);
173-
settings.displaySerializerWarning = displaySerializerWarning;
174-
settings.debug = debug;
175-
settings.disableJackson2ModuleDiscovery = disableJackson2ModuleDiscovery;
176-
settings.jackson2ModuleDiscovery = jackson2ModuleDiscovery;
177-
settings.loadJackson2Modules(classLoader, jackson2Modules);
178-
settings.classLoader = classLoader;
179-
final File output = outputFile != null
180-
? getProject().file(outputFile)
181-
: new File(new File(getProject().getBuildDir(), "typescript-generator"), getProject().getName() + settings.getExtension());
182-
settings.validateFileName(output);
113+
// Settings
114+
final Settings settings = new Settings();
115+
if (outputFileType != null) {
116+
settings.outputFileType = outputFileType;
117+
}
118+
settings.outputKind = outputKind;
119+
settings.module = module;
120+
settings.namespace = namespace;
121+
settings.mapPackagesToNamespaces = mapPackagesToNamespaces;
122+
settings.umdNamespace = umdNamespace;
123+
settings.moduleDependencies = moduleDependencies;
124+
settings.setExcludeFilter(excludeClasses, excludeClassPatterns);
125+
settings.jsonLibrary = jsonLibrary;
126+
settings.setJackson2Configuration(classLoader, jackson2Configuration);
127+
settings.declarePropertiesAsOptional = declarePropertiesAsOptional;
128+
settings.optionalProperties = optionalProperties;
129+
settings.optionalPropertiesDeclaration = optionalPropertiesDeclaration;
130+
settings.declarePropertiesAsReadOnly = declarePropertiesAsReadOnly;
131+
settings.removeTypeNamePrefix = removeTypeNamePrefix;
132+
settings.removeTypeNameSuffix = removeTypeNameSuffix;
133+
settings.addTypeNamePrefix = addTypeNamePrefix;
134+
settings.addTypeNameSuffix = addTypeNameSuffix;
135+
settings.customTypeNaming = Settings.convertToMap(customTypeNaming);
136+
settings.customTypeNamingFunction = customTypeNamingFunction;
137+
settings.referencedFiles = referencedFiles;
138+
settings.importDeclarations = importDeclarations;
139+
settings.customTypeMappings = Settings.convertToMap(customTypeMappings);
140+
settings.mapDate = mapDate;
141+
settings.mapEnum = mapEnum;
142+
settings.nonConstEnums = nonConstEnums;
143+
settings.loadNonConstEnumAnnotations(classLoader, nonConstEnumAnnotations);
144+
settings.mapClasses = mapClasses;
145+
settings.mapClassesAsClassesPatterns = mapClassesAsClassesPatterns;
146+
settings.disableTaggedUnions = disableTaggedUnions;
147+
settings.ignoreSwaggerAnnotations = ignoreSwaggerAnnotations;
148+
settings.generateJaxrsApplicationInterface = generateJaxrsApplicationInterface;
149+
settings.generateJaxrsApplicationClient = generateJaxrsApplicationClient;
150+
settings.jaxrsNamespacing = jaxrsNamespacing;
151+
settings.setJaxrsNamespacingAnnotation(classLoader, jaxrsNamespacingAnnotation);
152+
settings.restResponseType = restResponseType;
153+
settings.setRestOptionsType(restOptionsType);
154+
settings.loadCustomTypeProcessor(classLoader, customTypeProcessor);
155+
settings.sortDeclarations = sortDeclarations;
156+
settings.sortTypeDeclarations = sortTypeDeclarations;
157+
settings.noFileComment = noFileComment;
158+
settings.noTslintDisable = noTslintDisable;
159+
settings.javadocXmlFiles = javadocXmlFiles;
160+
settings.loadExtensions(classLoader, Utils.concat(extensionClasses, extensions), extensionsWithConfiguration);
161+
settings.loadIncludePropertyAnnotations(classLoader, includePropertyAnnotations);
162+
settings.loadExcludePropertyAnnotations(classLoader, excludePropertyAnnotations);
163+
settings.loadOptionalAnnotations(classLoader, optionalAnnotations);
164+
settings.generateInfoJson = generateInfoJson;
165+
settings.generateNpmPackageJson = generateNpmPackageJson;
166+
settings.npmName = npmName == null && generateNpmPackageJson ? getProject().getName() : npmName;
167+
settings.npmVersion = npmVersion == null && generateNpmPackageJson ? settings.getDefaultNpmVersion() : npmVersion;
168+
settings.npmBuildScript = npmBuildScript;
169+
settings.setStringQuotes(stringQuotes);
170+
settings.setIndentString(indentString);
171+
settings.displaySerializerWarning = displaySerializerWarning;
172+
settings.debug = debug;
173+
settings.disableJackson2ModuleDiscovery = disableJackson2ModuleDiscovery;
174+
settings.jackson2ModuleDiscovery = jackson2ModuleDiscovery;
175+
settings.loadJackson2Modules(classLoader, jackson2Modules);
176+
settings.classLoader = classLoader;
177+
final File output = outputFile != null
178+
? getProject().file(outputFile)
179+
: new File(new File(getProject().getBuildDir(), "typescript-generator"), getProject().getName() + settings.getExtension());
180+
settings.validateFileName(output);
183181

184-
// TypeScriptGenerator
185-
new TypeScriptGenerator(settings).generateTypeScript(
186-
Input.fromClassNamesAndJaxrsApplication(classes, classPatterns, classesWithAnnotations, classesFromJaxrsApplication, classesFromAutomaticJaxrsApplication,
187-
settings.getExcludeFilter(), classLoader, loggingLevel == Logger.Level.Debug),
188-
Output.to(output)
189-
);
182+
// TypeScriptGenerator
183+
new TypeScriptGenerator(settings).generateTypeScript(
184+
Input.fromClassNamesAndJaxrsApplication(classes, classPatterns, classesWithAnnotations, classesFromJaxrsApplication, classesFromAutomaticJaxrsApplication,
185+
settings.getExcludeFilter(), classLoader, loggingLevel == Logger.Level.Debug),
186+
Output.to(output)
187+
);
188+
}
190189
}
191190

192191
}

typescript-generator-maven-plugin/src/main/java/cz/habarta/typescript/generator/maven/GenerateMojo.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -621,16 +621,20 @@ public class GenerateMojo extends AbstractMojo {
621621

622622
@Override
623623
public void execute() {
624-
try {
625-
TypeScriptGenerator.setLogger(new Logger(loggingLevel));
626-
TypeScriptGenerator.printVersion();
624+
TypeScriptGenerator.setLogger(new Logger(loggingLevel));
625+
TypeScriptGenerator.printVersion();
627626

628-
// class loader
629-
final List<URL> urls = new ArrayList<>();
627+
// class loader
628+
final List<URL> urls = new ArrayList<>();
629+
try {
630630
for (String element : project.getCompileClasspathElements()) {
631631
urls.add(new File(element).toURI().toURL());
632632
}
633-
final URLClassLoader classLoader = Settings.createClassLoader(project.getArtifactId(), urls.toArray(new URL[0]), Thread.currentThread().getContextClassLoader());
633+
} catch (DependencyResolutionRequiredException | IOException e) {
634+
throw new RuntimeException(e);
635+
}
636+
637+
try (URLClassLoader classLoader = Settings.createClassLoader(project.getArtifactId(), urls.toArray(new URL[0]), Thread.currentThread().getContextClassLoader())) {
634638

635639
// Settings
636640
final Settings settings = new Settings();
@@ -707,8 +711,7 @@ public void execute() {
707711
settings.getExcludeFilter(), classLoader, loggingLevel == Logger.Level.Debug),
708712
Output.to(output)
709713
);
710-
711-
} catch (DependencyResolutionRequiredException | IOException e) {
714+
} catch (IOException e) {
712715
throw new RuntimeException(e);
713716
}
714717
}

0 commit comments

Comments
 (0)