[
https://issues.apache.org/jira/browse/FREEMARKER-160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17213232#comment-17213232
]
Dániel Dékány commented on FREEMARKER-160:
------------------------------------------
Class loaders generally have a delegate class loader (or even can look up in
multiple locations themselves), but {{getResurce("")}} doesn't show that, as it
has to pick a single URL. Anyway, it's completely common to have a class and
some companion resources in the same package, and then to load that with
{{getResourceAsStream}}. Lot of projects would break if that doesn't work. Does
that work for you? It definitely should, or else something outside FreeMarker
is broken there. If it does work, then next we can figure out how doing pretty
much the same with FreeMarker differs. (FreeMarker uses {{getResource}}, not
{{getResourceAsSteram}}, but unless it's overridden, the last internally just
calls {{getResource}}.)
> Resources not found
> -------------------
>
> Key: FREEMARKER-160
> URL: https://issues.apache.org/jira/browse/FREEMARKER-160
> Project: Apache Freemarker
> Issue Type: Bug
> Affects Versions: 2.3.30
> Reporter: Stefan Huber
> Priority: Major
> Attachments: packageStructure.png
>
>
> Used technologies:
> * JDK 14
> * Gradle 6.5
> I use {code:java}setClassForTemplateLoading(SupportedDatabases.class,
> Path.get("templates", "mysql")){code} to specify the location of all my
> template files. Eventhough the files are seemingly correctly placed relative
> to the loading class (see attachment), resources are not found and the
> following error is thrown:
> {code:java}
> Caused by: freemarker.template.TemplateNotFoundException: Template not found
> for name "checkDBExistence.ftlh".
> The name was interpreted by this TemplateLoader:
> ClassTemplateLoader(resourceLoaderClass=bayern.steinbrecher.dbConnector.query.SupportedDatabases,
> basePackagePath="templates/mysql/" /* relatively to resourceLoaderClass pkg
> */).
> {code}
> I figured out that based on https://stackoverflow.com/a/14740160
> {code:java}Thread.currentThread().getContextClassLoader(){code} is a way more
> reliable choice in context of my modular projects.
> For testing the bug the following minimal setup can be used:
> - Java project (Maven or Gradle) that imports
> {code}bayern.steinbrecher:DBConnector:0.9{code}
> - A main function which consist of the following call
> {code:java}SupportedDatabases.values(){code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)