如何使目标文件夹中的 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 文件中,并将其放置在目标文件夹中。
问题:
- 如何让我的插件像
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>
您需要将新工件(生成的 zip 文件)作为 官方 工件的一部分附加到构建中(在这种情况下这是正确的术语)。
这基本上就是 build-helper-maven-plugin
的 attach-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。
我正在创建自己的 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>
您需要将新工件(生成的 zip 文件)作为 官方 工件的一部分附加到构建中(在这种情况下这是正确的术语)。
这基本上就是 build-helper-maven-plugin
的 attach-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。