快速构建配置

如果您遵循推荐的方法并使用专用的本地存储库进行集成测试(例如target/local-repo),您可能会遇到很长的构建时间。如果测试存储库已被清理,插件需要从中央存储库重新下载所有工件,由此产生的网络流量会减慢测试执行速度。

但是您可以配置插件以从本地存储库下载已发布的工件。注意:这将在没有可选设置的情况下使用 Maven >= 2.0.9,因为许多插件版本被锁定在超级 POM 中。对于旧版本,您必须锁定插件版本。

要启用此功能,您必须settings.xml在项目中添加一个文件(例如在 中src/it/settings.xml)并修改插件配置,如下所示:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-invoker-plugin</artifactId>
        <version>3.2.2</version>
        <configuration>
          ...
          <settingsFile>src/it/settings.xml</settingsFile>
          ...
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

设置必须包含以下内容,这些内容有效地告诉 Maven 将本地存储库用作远程存储库:

<?xml version="1.0"?>
<settings>
  <profiles>
    <profile>
      <id>it-repo</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <repositories>
        <repository>
          <id>local.central</id>
          <url>@localRepositoryUrl@</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>local.central</id>
          <url>@localRepositoryUrl@</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
</settings>

令牌@localRepositoryUrl@将被 Invoker 插件自动替换为用于 Maven 调用的本地存储库的 URL。

快速构建配置 - mergeUserSettings 和镜像

当您想使用带有选项的快速构建配置时,mergeUserSettings您应该注意您的镜像设置。

如果你有类似的~/.m2/settings.xml东西:

<mirrors>
    <mirror>
        <id>mirrorId</id>
        <name>Public Mirrors</name>
        <url>url_to_my_mirror</url>
        <mirrorOf>*,!repo1,!repo2</mirrorOf>
    </mirror>
</mirrors>

请查看mirrorOf标签,单一*表示匹配所有存储库以进行镜像 - 具有 id 的存储库也local.central将被镜像。在有效的快速构建配置中将无法按预期工作。

您应该将其更改为类似:

<mirrors>
    <mirror>
        <id>mirrorId</id>
        <name>Public Mirrors</name>
        <url>url_to_my_mirror</url>
        <mirrorOf>external:*,!repo1,!repo2</mirrorOf>
    </mirror>
</mirrors>

Where external:*- 匹配所有存储库,除了那些使用 localhost 或基于文件的存储库。