用法

要处理过滤此版本的 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@ ”格式指定的表达式。但是,有时使用一组不同的过滤器分隔符可能更方便。通过配置filterDelimitersuseDefaultFilterDelimiters参数,您可以高度控制过滤过程。

要启用格式“ #{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>