要处理过滤此版本的 Maven 远程资源插件,请使用Maven Filtering 3.1.1。
要打开捆绑资源清单生成,您需要按如下方式配置插件:
<project> ... <build> <plugins> <!-- Turn this into a lifecycle --> <plugin> <artifactId>maven-remote-resources-plugin</artifactId> <version>1.7.0</version> <executions> <execution> <goals> <goal>bundle</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ... </project>
这将触发对该项目的${basedir}/src/main/resources目录的扫描并创建${basedir}/target/classes/META-INF/maven/remote-resources.xml 清单文件。
注意:文件必须命名为*.vm以将它们标记为Velocity宏文件,这些文件将被进程目标过滤。如果您不根据此命名文件,它们将不会被过滤。
要使用远程资源包,您需要按如下方式配置插件:
<project> ... <build> <plugins> <!-- Turn this into a lifecycle --> <plugin> <artifactId>maven-remote-resources-plugin</artifactId> <version>1.7.0</version> <executions> <execution> <id>process-remote-resources</id> <goals> <goal>process</goal> </goals> <configuration> <resourceBundles> <resourceBundle>org.apache:apache-jar-resource-bundle:1.0</resourceBundle> </resourceBundles> </configuration> </execution> </executions> </plugin> </plugins> </build> ... </project>
这将从您的 POM 中指定的远程存储库中检索apache-jar-resource-bundle-1.0.jar ,处理包中的每个资源并将它们存放在您的项目${basedir}/target/classes目录中。
注意:此功能是在 1.1 版中添加的。
在许多情况下,一个应用程序构建由多个 Maven 模块组成,但您只需为整个应用程序包含一次许可文件、依赖项列表等。当然,在这种情况下,依赖列表需要聚合所有模块的所有依赖。
为此,您可以在应用程序父 POM 中配置远程资源插件时使用runOnlyAtExecutionRoot参数。此参数将远程资源插件的执行限制在运行构建的根目录中。在大多数情况下,应用程序的分发档案将在这个顶级目录中创建,因此这是一个自然的位置,应该在其中生成许可和依赖信息。
要仅在执行根目录中运行远程资源插件,请使用以下命令:
<plugin> <artifactId>maven-remote-resources-plugin</artifactId> <version>1.7.0</version> [...] <executions> <execution> <id>process-remote-resources</id> <goals> <goal>process</goal> </goals> <configuration> <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot> [...] </configuration> </execution> </executions> </plugin>
注意:此功能是在 1.1 版中添加的。
默认情况下,远程资源插件支持使用“ ${expr} ”或“ @expr@ ”格式指定的表达式。但是,有时使用一组不同的过滤器分隔符可能更方便。通过配置filterDelimiters和useDefaultFilterDelimiters参数,您可以高度控制过滤过程。
要启用格式“ #{expr} ”(Ruby 风格)的过滤器分隔符,请将以下内容添加到您的插件配置中:
<plugin> <artifactId>maven-remote-resources-plugin</artifactId> <version>1.7.0</version> <executions> <execution> <id>process-remote-resources</id> <goals> <goal>process</goal> </goals> <configuration> <filterDelimiters> <filterDelimiter>#{*}</filterDelimiter> </filterDelimiters> [...] </configuration> </execution> </executions> </plugin>
注意上面的“ * ”字符。这表示开始和结束分隔符之间的分界点,将指定实际表达式。
如果您的开始和结束分隔符相同,您可以使用更简单的配置。例如,要启用格式“ #expr# ”的过滤分隔符,请将以下内容添加到您的插件配置中:
<plugin> <artifactId>maven-remote-resources-plugin</artifactId> <version>1.7.0</version> <executions> <execution> <id>process-remote-resources</id> <goals> <goal>process</goal> </goals> <configuration> <filterDelimiters> <filterDelimiter>#</filterDelimiter> </filterDelimiters> [...] </configuration> </execution> </executions> </plugin>
当过滤器处理器执行并注意到此分隔符规范缺少“ * ”字符时,它将简单地假设提供的分隔符将用作表达式的开始和结束分隔符。
以上所有假设您仍然希望能够使用“ ${expr} ”和“ @expr@ ”定界符。但是,如果这会导致问题,您可以禁用这些默认分隔符,如下所示:
<plugin> <artifactId>maven-remote-resources-plugin</artifactId> <version>1.7.0</version> <executions> <execution> <id>process-remote-resources</id> <goals> <goal>process</goal> </goals> <configuration> <useDefaultFilterDelimiters>false</useDefaultFilterDelimiters> [...] </configuration> </execution> </executions> </plugin>