覆盖Maven中的"干净"生命周期

Vic*_*cky 10 build-process maven-2 build maven

我正在阅读一本书,解释如何覆盖Maven的"默认"生命周期.

它说:要为包装类型定义新的生命周期,您需要在Plexus中配置LifecycleMapping组件.在您的插件项目中,在src/main/resources下创建META-INF/plexus/components.xml.在components.xml中添加内容,如下所示,您就完成了.通过以下配置,我可以自定义'jar'包装类型的默认生命周期.现在如果我执行
$ mvn包
它直接执行'package'阶段跳过默认生命周期的所有其他阶段并执行'maven-zip-plugin'的'echo'目标.

<component-set>
    <components>
        <component>
            <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
            <role-hint>zip</role-hint>
            <implementation>
                org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping
            </implementation>
            <configuration>
                <phases>
                    <package>org.sonatype.mavenbook.plugins:maven-zip-plugin:echo
                    </package>
                </phases>
            </configuration>
        </component>
    </components>
</component-set>
Run Code Online (Sandbox Code Playgroud)

我的问题是:我如何定制"干净"的生命周期.例如,假设某些类型
$ mvn clean
而不是运行clean:clean将执行'maven-clean-plugin'插件的'clean'目标,我想执行'customPluan'的'customClean'目标.

Mat*_*ard 19

对于您所描述的内容,maven-clean-pluginclean阶段期间阻止运行更简单,并将customPlugin附加到clean阶段.这比短路整个生命周期更简单,并将所有maven配置保存在您的pom中.

1防止maven-clean-plugin

<plugin>
    <artifactId>maven-clean-plugin</artifactId>
    <version>2.4.1</version>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

2将您自己的插件附加到清洁阶段

<plugin>
    <artifactId>maven-customPlugin-plugin</artifactId>
    <version>customPlugin-version</version>
    <executions>
        <execution>
            <id>customised-clean</id>
            <goals>
                <goal>customClean</goal>
            </goals>
            <phase>clean</phase>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)