共享资源

远程资源插件还可用于在多模块构建中的模块之间共享资源。在以下示例中,我们有一组文件用于为数据库设置测试环境。我们希望在项目的几个模块中重用这些资源。

为要共享的资源设置一个模块

创建一个名为shared-resources的新模块。将文件放在如下所示的目录布局中,确保您的资源文件位于src/main/resources目录中:

shared-resources
|
+- src
|  |
|  `- main
|     |
|     `- resources
|        |
|        +- database.ddl
|        |
|        `- database.sql
|
`- pom.xml

共享资源的 POM应如下所示:

<project>
  ...  
  <groupId>org.test</groupId>
  <artifactId>shared-resources</artifactId>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-remote-resources-plugin</artifactId>
        <version>1.7.0</version>
        <executions>
          <execution>
            <goals>
              <goal>bundle</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <includes>
            <include>**/*.ddl</include>
            <include>**/*.sql</include>
          </includes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

这将在生成资源阶段将共享资源捆绑在一个 JAR 文件中。这意味着其他模块可以在之后的任何阶段消耗这些资源。

配置其他模块使用共享模块

要在另一个模块中使用共享资源,您需要按如下方式配置插件:

<project>
  ...
  <groupId>org.test</groupId>
  <artifactId>resource-consumer</artifactId>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-remote-resources-plugin</artifactId>
        <version>1.7.0</version>
        <configuration>
          <resourceBundles>
            <resourceBundle>org.test:shared-resources:${project.version}</resourceBundle>
          </resourceBundles>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>process</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sql-maven-plugin</artifactId>
        <version>1.4</version>
        ...
        <!-- Not showing dependencies or configuration here for brevity -->
        ...
        <executions>
          <execution>
            <id>create-schema</id>
            <phase>process-test-resources</phase>
            <goals>
              <goal>execute</goal>
            </goals>
            <configuration>
              <autocommit>true</autocommit>
              <srcFiles>
                <srcFile>${project.build.directory}/maven-shared-archive-resources/database.ddl</srcFile>
                <srcFile>${project.build.directory}/maven-shared-archive-resources/database.sql</srcFile>
              </srcFiles>
            </configuration>
          </execution>
          ...
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>shared-resources</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</project>

这将检索共享资源模块的捆绑资源,处理捆绑中的每个资源并将它们放在资源消费者模块的${project.build.directory}/maven-shared-archive-resources目录中。

这意味着我们可以使用 SQL Maven 插件中的这些文件来使用 DDL 文件设置数据库模式,并使用 SQL 文件将一些数据添加到数据库中。