Skip to content

Commit 413f11f

Browse files
fanstekoentsje
authored andcommitted
HBX-3165: Support zip and jar archives as TEMPLATE_PATH
1 parent c7e9ea1 commit 413f11f

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

orm/src/main/java/org/hibernate/tool/internal/export/common/TemplateHelper.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
import java.io.Reader;
1313
import java.io.StringReader;
1414
import java.io.Writer;
15+
import java.net.MalformedURLException;
16+
import java.net.URL;
17+
import java.net.URLClassLoader;
1518
import java.util.ArrayList;
1619
import java.util.Date;
1720
import java.util.List;
@@ -22,6 +25,7 @@
2225
import freemarker.cache.ClassTemplateLoader;
2326
import freemarker.cache.FileTemplateLoader;
2427
import freemarker.cache.MultiTemplateLoader;
28+
import freemarker.cache.URLTemplateLoader;
2529
import freemarker.cache.TemplateLoader;
2630
import freemarker.ext.beans.BeansWrapperBuilder;
2731
import freemarker.template.Configuration;
@@ -67,15 +71,27 @@ public void init(File outputDirectory, String[] templatePaths) {
6771

6872
for (int i = 0; i < templatePaths.length; i++) {
6973
File file = new File(templatePaths[i]);
70-
if(file.exists() && file.isDirectory()) {
71-
try {
72-
loaders.add(new FileTemplateLoader(file));
73-
}
74-
catch (IOException e) {
75-
throw new RuntimeException("Problems with templatepath " + file, e);
76-
}
74+
if(file.exists()) {
75+
if (file.isDirectory()) {
76+
try {
77+
loaders.add(new FileTemplateLoader(file));
78+
} catch (IOException e) {
79+
throw new RuntimeException("Problems with templatepath " + file, e);
80+
}
81+
} else if (file.getName().endsWith(".zip") || file.getName().endsWith(".jar")) {
82+
final URLClassLoader classLoaderForZip;
83+
try {
84+
classLoaderForZip = new URLClassLoader(new URL[]{ file.toURI().toURL() }, null);
85+
} catch (MalformedURLException e) {
86+
throw new RuntimeException("template path " + file + " is not a valid zip file", e);
87+
}
88+
89+
loaders.add(new ClassTemplateLoader(classLoaderForZip, "/"));
90+
} else {
91+
log.warn("template path " + file + " is not a directory");
92+
}
7793
} else {
78-
log.warn("template path" + file + " either does not exist or is not a directory");
94+
log.warn("template path " + file + " does not exist");
7995
}
8096
}
8197
loaders.add(new ClassTemplateLoader(this.getClass(),"/")); // the template names are like pojo/Somewhere so have to be a rooted classpathloader

0 commit comments

Comments
 (0)