OpenGrok升级到1.14.4版本后,在首页报错,如下:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
org.apache.jasper.el.JspELException: /WEB-INF/tags/repository.tag(43,4) '${pageConfig.getRelativePath(pageConfig.sourceRootPath, repositoryInfo.directoryName)}' Method not found: class org.opengrok.web.PageConfig.getRelativePath(java.lang.String, java.lang.String) jakarta.servlet.jsp.JspException: org.apache.jasper.el.JspELException: /WEB-INF/tags/repository.tag(43,4) '${pageConfig.getRelativePath(pageConfig.sourceRootPath, repositoryInfo.directoryName)}' Method not found: class org.opengrok.web.PageConfig.getRelativePath(java.lang.String, java.lang.String) at org.apache.jsp.tag.web.repository_tag.doTag(repository_tag.java:272) at org.apache.jsp.tag.web.repositories_tag._jspx_meth_opengrok_005frepository_005f0(repositories_tag.java:367) at org.apache.jsp.tag.web.repositories_tag._jspx_meth_c_005fif_005f2(repositories_tag.java:335) at org.apache.jsp.tag.web.repositories_tag._jspx_meth_c_005fforEach_005f1(repositories_tag.java:298) at org.apache.jsp.tag.web.repositories_tag._jspx_meth_c_005fif_005f1(repositories_tag.java:262) at org.apache.jsp.tag.web.repositories_tag._jspx_meth_c_005fforEach_005f0(repositories_tag.java:225) at org.apache.jsp.tag.web.repositories_tag._jspx_meth_c_005fif_005f0(repositories_tag.java:191) at org.apache.jsp.tag.web.repositories_tag.doTag(repositories_tag.java:149) at org.apache.jsp.index_jsp._jspService(index_jsp.java:938) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:62) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:428) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:350) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:301) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:138) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:138) at org.opengrok.web.CookieFilter.doFilter(CookieFilter.java:50) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:138) at org.opengrok.web.AuthorizationFilter.doFilter(AuthorizationFilter.java:100) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:138) at org.opengrok.web.StatisticsFilter.doFilter(StatisticsFilter.java:69) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:138) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:165) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:88) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:113) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:83) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:72) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1774) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:973) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:491) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: org.apache.jasper.el.JspELException: /WEB-INF/tags/repository.tag(43,4) '${pageConfig.getRelativePath(pageConfig.sourceRootPath, repositoryInfo.directoryName)}' Method not found: class org.opengrok.web.PageConfig.getRelativePath(java.lang.String, java.lang.String) at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:134) at org.apache.jsp.tag.web.repository_tag._jspx_meth_c_005fset_005f6(repository_tag.java:426) at org.apache.jsp.tag.web.repository_tag._jspx_meth_c_005fif_005f0(repository_tag.java:402) at org.apache.jsp.tag.web.repository_tag.doTag(repository_tag.java:211) ... 44 more |
详细报错如下:

原因为 opengrok-web/src/main/java/org/opengrok/web/PageConfig.java 里的 public static String getRelativePath(String root, String path) 函数被删除导致的。
修复代码的差别如下:

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
diff --git a/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java b/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java index 5d14522d053..fd26d6790a8 100644 --- a/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java +++ b/opengrok-web/src/main/java/org/opengrok/web/PageConfig.java @@ -29,6 +29,8 @@ import static org.opengrok.indexer.history.LatestRevisionUtil.getLatestRevision; import static org.opengrok.indexer.index.Indexer.PATH_SEPARATOR; import static org.opengrok.indexer.index.Indexer.PATH_SEPARATOR_STRING; + +import java.nio.file.Paths; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; @@ -1860,6 +1862,16 @@ public class PageConfig { ); } + /** + * @param root root path + * @param path path + * @return path relative to root + */ + public static String getRelativePath(String root, String path) { + return Paths.get(root).relativize(Paths.get(path)).toString(); + } + + /** * Determines whether a match offset from a search result has been indicated, * and if so tries to calculate a translated xref fragment identifier. |