Jetty Maven 插件资源库不会解析空格

问题描述 投票:0回答:1

我的应用程序上安装了最新的 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 的情况下解析它?

maven escaping maven-jetty-plugin
1个回答
0
投票

这是由以下问题引起的:https://github.com/jetty/jetty.project/issues/12000

该问题应该会在 2024 年 8 月上旬发布的下一个插件版本中得到解决。

© www.soinside.com 2019 - 2024. All rights reserved.