0

我使用 maven replacer 插件来替换 swagger.json 文件中的一些 json。此配置适用于在 java 8 中完成的其他项目。此项目在 java 11 中,并且具有相同正则表达式的相同配置不起作用。正则表达式需要匹配"paths" : {

<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <version>1.5.3</version>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>replace</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <file>${project.build.directory}/${project.artifactId}-${project.version}/public/docs/swagger.json</file>
                <replacements>
                    <replacement>
                        <token>"paths"+\ \:\ \{</token>
                        <valueFile>${project.basedir}/src/main/resources/swagger/tokenEndpointsPaths.json
                        </valueFile>
                    </replacement>
            </configuration>
        </plugin>

这是错误日志:


[ERROR] Failed to execute goal com.google.code.maven-replacer-plugin:replacer:1.5.3:replace (default) on project emisiawire-fire-spring-webmvc: Illegal group reference -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.google.code.maven-replacer-plugin:replacer:1.5.3:replace (default) on project emisiawire-fire-spring-webmvc: Illegal group reference
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: Illegal group reference
        at com.google.code.maven_replacer_plugin.ReplacerMojo.execute(ReplacerMojo.java:401)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
        ... 20 more
Caused by: java.lang.IllegalArgumentException: Illegal group reference
        at java.base/java.util.regex.Matcher.appendExpandedReplacement(Matcher.java:1068)
        at java.base/java.util.regex.Matcher.appendReplacement(Matcher.java:998)
        at java.base/java.util.regex.Matcher.replaceAll(Matcher.java:1182)
        at com.google.code.maven_replacer_plugin.TokenReplacer.replaceRegex(TokenReplacer.java:24)
        at com.google.code.maven_replacer_plugin.TokenReplacer.replace(TokenReplacer.java:11)
        at com.google.code.maven_replacer_plugin.ReplacementProcessor.replaceContent(ReplacementProcessor.java:35)
        at com.google.code.maven_replacer_plugin.ReplacementProcessor.replace(ReplacementProcessor.java:23)
        at com.google.code.maven_replacer_plugin.ReplacerMojo.replaceContents(ReplacerMojo.java:454)
        at com.google.code.maven_replacer_plugin.ReplacerMojo.execute(ReplacerMojo.java:391)
        ... 22 more 

当我仅"paths" : {在令牌选项卡内使用时,什么都不会被替换。

4

2 回答 2

1

我发现并解决了这个问题。标签内的正则表达式没问题(至少我的问题中的正则表达式,在我解决问题后我还没有尝试过其他变体,可能它们都有效)。问题是我用于替换的文件中的 $ 符号(在我的示例 tokenEndpointsPaths.json 中包含 $ )。我只是用 \ 来转义 char $ 并解决了它。

于 2019-02-20T09:36:40.440 回答
0

您可以像这样替换正则表达式

<token>"paths"+\ \:\ \{</token>
              ^  ^   ^             // you have anecassary characters here

通过这个:

<token>%regex["paths" : \{]</token>

检查正则表达式演示:

有关更多详细信息,请查看文档,如何在 pom 中使用正则表达式:

  1. https://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html

正则表达式演示

于 2019-02-19T13:45:43.927 回答