我的应用程序上安装了最新的 jetty-ee10-maven-plugin,当我尝试运行它时,出现以下错误。
java.lang.IllegalArgumentException: Bad resourceBases: [/home/user/MyApp/Git Repository/MyApp/MyApp - Local Server/src/main/webapp, /home/user/MyApp/Git Repository/MyApp/target/war/]
at org.eclipse.jetty.ee10.maven.plugin.MavenWebAppContext.setResourceBases(MavenWebAppContext.java:241)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
... 35 more
Caused by: java.lang.IllegalArgumentException: Illegal character in path at index 20: /home/user/MyApp/Git Repository/MyApp/MyApp - Local Server/src/main/webapp
at java.base/java.net.URI.create(URI.java:932)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622)
at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627)
at org.eclipse.jetty.ee10.maven.plugin.MavenWebAppContext.setResourceBases(MavenWebAppContext.java:235)
... 36 more
Caused by: java.net.URISyntaxException: Illegal character in path at index 20: /home/user/MyApp/Git Repository/MyApp/MyApp - Local Server/src/main/webapp
at java.base/java.net.URI$Parser.fail(URI.java:2995)
at java.base/java.net.URI$Parser.checkChars(URI.java:3166)
at java.base/java.net.URI$Parser.parseHierarchical(URI.java:3248)
at java.base/java.net.URI$Parser.parse(URI.java:3207)
at java.base/java.net.URI.<init>(URI.java:645)
at java.base/java.net.URI.create(URI.java:930)
我提供的ResourceBases路径中有空格,看起来无法解析。不幸的是,从这条路径中删除空格并不像听起来那么简单。
下面是 pom.xml 中 jetty-ee10-maven-plugin 的插件部分。
<plugin>
<groupId>org.eclipse.jetty.ee10</groupId>
<artifactId>jetty-ee10-maven-plugin</artifactId>
<configuration>
<scan>1</scan>
<contextXml>${basedir}/src/main/jettyconf/context.xml</contextXml>
<jvmArgs>-Xms1G -Xmx4G</jvmArgs>
<httpConnector>
<host>127.0.0.1</host>
<port>8888</port>
</httpConnector>
<webApp>
<resourceBases>
<resourceBase>/home/user/MyApp/Git Repository/MyApp/MyApp - Local Server/src/main/webapp</resourceBase>
<resourceBase>/home/usser/MyApp/Git Repository/Brainex/target/war/</resourceBase>
</resourceBases>
</webApp>
</configuration>
</plugin>
我在上面的resourceBase部分中包含了完整路径,但通常这些值设置为:
${basedir}/src/main/webapp
and
${project.parent.build.directory}/war/
因此任何手动替换(例如用 %20 替换空格)都不理想。
我尝试了所有我能想到的逃避方法。我尝试使用 %20,以便 URI 解析器可以工作,但 % 在进入 URI 解析器之前被转义。还尝试使用反斜杠来转义 %、转义空格,并且我也尝试了 xml 转义空格。我尝试用引号括起来,但 URI 表示它们也是非法字符。
有什么方法可以转义整个resourceBase标签吗?或者有什么方法可以让 Jetty 在不使用 java.net.URI 的情况下解析它?
这是由以下问题引起的:https://github.com/jetty/jetty.project/issues/12000
该问题应该会在 2024 年 8 月上旬发布的下一个插件版本中得到解决。