[ 
https://issues.apache.org/jira/browse/FREEMARKER-160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17215950#comment-17215950
 ] 

Dániel Dékány commented on FREEMARKER-160:
------------------------------------------

Great. I'm still interested why the {{SupportedDatabases.class.getResource}} 
approach doesn't work, especially as it should just delegate to 
{{ClassLoader.getResource}}, after resolving the path to absolute path. Did you 
debug into the calls? If it turns out that it's not some local quirk, we should 
document this at least.

As of the initial {{/}} in the case of using the {{ClassLoader}} API, I 
checked, and FreeMarker internally always removes the initial {{/}} in that 
case. I also see that {{java.lang.Class#resolveName}} does the same. 
{{ClassLoader#getResource}} API docs fails to mention this requirement though. 
But it seems there's a such expectation.

> 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)

Reply via email to