如何使目标文件夹中的 zip 文件(由自制的 maven 插件生成)最终出现在本地存储库中?

how to make zip files (produced by a self-made maven plugin)from target folder end up in the local repository?

我正在创建自己的 maven-environment-plugin,它为配置中定义的每个环境的预定义文件夹结构创建和捆绑资源。该插件正在将文件夹结构和资源输出到 zip 文件中,并将其放置在目标文件夹中。

问题:

我正在使用 mojo 进行插件开发。

<plugin>
    <groupId>dk.kmd.devops.maven.plugin</groupId>
    <artifactId>envconfiguration-maven-plugin</artifactId>
    <version>1.0.3</version>
    <configuration>
        <environments>
            <environment>${env.local}</environment>
            <environment>${env.dev}</environment>
            <environment>${env.t1}</environment>
            <environment>${env.t2}</environment>
            <environment>${env.p0}</environment>
        </environments>
        <sourceConfigDir>${basedir}/src/main/config</sourceConfigDir>
        <zipEnvironments>true</zipEnvironments>
    </configuration>
    <executions>
        <execution>
            <phase>generate-resources</phase>
            <goals>
                <goal>generateEnv</goal>
            </goals>
        </execution>
    </executions>
</plugin>

您需要将新工件(生成的 zip 文件)作为 官方 工件的一部分附加到构建中(在这种情况下这是正确的术语)。

这基本上就是 build-helper-maven-pluginattach-artifact 目标所做的:

Attach additional artifacts to be installed and deployed.

来自 its official examples,附加目标:

Typically run after antrun:run, or another plugin, that produces files that you want to attach to the project for install and deploy.

本例中的另一个插件可以是您开发的插件。因此,您的情况有两种解决方案:

  • 配置此插件以附加生成的工件作为进一步的 pom.xml 配置,或
  • 向您的插件添加自动附加生成的文件的功能

第二种情况可以通过 Maven API,使用 MavenProjectHelper and its attachArtifact 方法来解决。

在您的 mojo 中,您可以通过以下方式将其作为组件导入:

/**
 * Maven ProjectHelper
 */
@Component
private MavenProjectHelper projectHelper;

然后使用上述方法:

projectHelper.attachArtifact(project, "zip", outputFile);

您应该已经拥有提供它所需的 Maven 依赖项,但以防万一 this one:

<dependency>
   <groupId>org.apache.maven</groupId>
   <artifactId>maven-core</artifactId>
   <version>3.3.9</version>
</dependency>

请注意,工件将作为附加工件通过 classifier 附加到构建中,也就是说,默认工件名称的后缀将其与默认工件区分开来,并使其作为输出唯一构建。


作为真实示例的参考并进一步回答您的(最后一个)问题,请查看 this query on the GitHub maven-plugins repository, checking for the attachArtifact string, you will see it used in a number of Maven plugins, among which the maven-assembly-plugin, for example here in the AbstractAssemblyMojo class。