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

时间:2016-08-11 08:40:04

标签: maven maven-3 maven-plugin maven-assembly-plugin mojo

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

问题

  • 如何使我的插件像maven-assembly-plugin一样工作,以便当我使用'mvn install'时,我的输出到目标文件夹也会在我的本地存储库中结束?
  • 我需要标记它还是什么?当使用maven-assembly-plugin时,它会自动执行此操作。
  • maven-assembly-plugin如何设法确保这一点?

我正在使用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>

1 个答案:

答案 0 :(得分:1)

您需要将新工件(生成的zip文件)作为官方工件的一部分附加到构建(生成的zip文件)。

这基本上是build-helper-maven-plugin的{​​{3}}目标:

  

附加要安装和部署的其他工件。

来自attach-artifact,附加目标:

  

通常在antrun:run或其他插件之后运行,这些插件会生成要附加到项目以进行安装和部署的文件。

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

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

可以使用its official examples及其MavenProjectHelper方法通过Maven API覆盖第二种情况。

在你的魔咒中,你可以通过以下方式导入作为组件:

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

然后使用上述方法:

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

您应该已经拥有了所需的Maven依赖项,但以防它是attachArtifact

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

请注意,工件将通过this one附加到构建作为附加工件,即默认工件名称的后缀,将其与默认工件区分开来,并使其作为构建的输出唯一

作为对实例的参考并进一步回答你的(最后一个)问题,检查GitHub maven-plugins存储库上的classifier查询,检查attachArtifact字符串,你会看到它在许多Maven插件中使用,其中maven-assembly-plugin,例如this类中的here