JasperException - 即使存在标签也找不到文件
Posted
技术标签:
【中文标题】JasperException - 即使存在标签也找不到文件【英文标题】:JasperException - File Not Found even when tag is present 【发布时间】:2018-04-07 01:25:19 【问题描述】:好的 ***,我会在需要的时候来找你。
我继承了一个带有自定义标签库的项目。该项目在 AEM 中,但问题更多的是直接的 Java 方面的问题,并且我所知道的不是 AEM 特有的问题。 AEM 是基于 OSGI 构建的,因此 可能 是相关的,但同样不太可能成为答案的一部分。
基本上,我只在两台服务器中的一台上遇到异常。它说:
org.apache.sling.api.scripting.ScriptEvaluationException:org.apache.sling.scripting.jsp.jasper.JasperException:找不到文件“/META-INF/tags/helloWorld.tagx”
现在 - 这个helloWorld.tagx
是模板项目中遗留下来的垃圾,但出于某种原因,它是必不可少的。这里有一些问题。
-
标签 是 在正确的位置 (
META-INF/tags/helloWorld.tagx
),我正在使用 jsptld-maven-plugin
生成对我来说看起来正确的 tld
文件。
插件的配置(以及maven-bundle-plugin
):
<plugin>
<groupId>com.squeakysand.jsp</groupId>
<artifactId>jsptld-maven-plugin</artifactId>
<configuration>
<shortName>myproject</shortName>
<processTagFiles>true</processTagFiles>
</configuration>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-Activator>com.rebny.taglib.osgi.Activator</Bundle-Activator>
<Include-Resource>
META-INF/$project.artifactId-$project.version.tld=$project.build.outputDirectory/META-INF/$project.artifactId-$project.version.tld,
maven-resources
</Include-Resource>
<Sling-Bundle-Resources>
/META-INF/tags
</Sling-Bundle-Resources>
</instructions>
</configuration>
</plugin>
以及生成的 tld 文件中的段:
<tag-file>
<name>helloWorld</name>
<path>/META-INF/tags/helloWorld.tagx</path>
</tag-file>
所以对我来说它看起来不错,我进行了很多搜索,发现有语法错误等的人,但我不相信这里会出现这种情况,特别是因为它可以在一台服务器上运行。
-
奇怪的是标签实际上并没有在任何地方使用,但是删除它并不能解决问题。抛出此错误的 jsp 使用其他标签,但不是这个。在整个项目中实际上没有对这个标签的引用——我认为它可能隐藏了另一个问题。该错误表明它位于 JSP 的第 6 行,但源 JSP 或编译后的 JSP 在第 6 行或文件中都没有任何有趣的内容。同样,即使是已编译的 JSP 也没有引用此标记!
我很乐意提供其他信息。我对此的了解很差,所以我不确定哪些信息是相关的。非常感谢任何帮助或故障排除提示!
完整的堆栈跟踪here
【问题讨论】:
你的两台机器有什么不同?例如相同版本的所有内容、相同的软件等? 完整的堆栈跟踪会有所帮助 您使用的是哪个应用服务器/容器?您能否提供包含在 WEB-INF/lib 中的文件列表? web.xml 中的 TLD 怎么样 - 你能提供 web.xml 吗?顺便说一句:我假设您的构建是简单的 Maven 构建,没有花哨的提取、重新打包。 @MicheleMariotti 添加了完整的堆栈跟踪。 gist.github.com/jamiecounsell/e5f31bfc5b2839ee816c217b0757628f 我认为,或者这是我的假设,它构建在一个地方,并在不同的服务器上执行。某处肯定存在差异-例如不同的JDK或不同版本的AEM。不是很了解,刚看到很多关于问题的报告,从6.1升级到6.3的时候,有些是用6.3.11修复的……反正奇怪的问题。 【参考方案1】:问题与找不到脚本标记文件有关。 Reference。
这是一个 错误,它指出,如果捆绑包中的 taglib 引用了作为脚本实现的标记 (located in /META-INF/tags)
此脚本未找到,因为它是 未 搜索的在包含 tld
的包中。它被用作类路径上的资源。
该错误已在 JSP 2.3.2 版本中修复。所以在你的项目中使用这个 JSP 版本。此外,此错误将在 AEM 6.3.1.1 或更高版本中得到修复,
在这里,有一个与此问题相关的有用thread。
【讨论】:
感谢您的回答,但您会看到我已经对该线程发表了评论。不幸的是,该版本的 AEM 直到 11 月下旬才可用,而且太遥远了。【参考方案2】:您最好的选择是通过Adobe Daycare。他们很擅长给你打补丁。特别是如果您的客户与他们有现有关系,如果他们使用 AEM,他们应该这样做。
【讨论】:
以上是关于JasperException - 即使存在标签也找不到文件的主要内容,如果未能解决你的问题,请参考以下文章
即使在页面加载后,Salesforce 闪电自定义标签也不会更新
Azure 发布管道:即使添加了替换镜像标签的步骤,Docker 镜像标签也不会被替换