首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Maven执行插件?

如何使用Maven执行插件?
EN

Stack Overflow用户
提问于 2011-07-19 22:39:39
回答 4查看 41K关注 0票数 23

我想使用Maven执行插件来检查是否有重复的类在我的路径上。

我已经尝试过来自这里的例子。

但当我这样做的时候:

mvn enforcer:enforce

我知道这个错误:

未能在项目数据集上执行目标org.apache.maven.plugins:maven-enforcer-plugin:1.0.1:enforce (默认-cli):目标org.apache.maven.plugins:maven-enforcer-plugin:1.0.1:enforce的参数“规则”丢失或无效

有什么方法可以正确使用这个吗?

编辑#1

如果将我的配置更改为:

代码语言:javascript
复制
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>1.0.1</version>
            <executions>
                <execution>
                    <id>enforce-versions</id>
                    <goals>
                        <goal>enforce</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <AlwaysPass />
                        </rules>
                        <fail>true</fail>
                    </configuration>
                </execution>
            </executions>
        </plugin>

产生同样的错误。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-20 10:20:33

您的第一个版本不起作用的原因是执行标记内的插件配置与执行标记之外的插件配置之间存在差异。只有当插件由完整Maven构建的特定阶段触发时,才会使用该执行。

配置指南更好地解释了这一点:

标记内部的配置与外部配置不同,因为它们不能通过直接命令行调用来使用。相反,它们只在被绑定到的生命周期阶段被调用时应用。或者,如果您将配置部分移出执行部分之外,则它将全局应用于插件的所有调用。

票数 28
EN

Stack Overflow用户

发布于 2011-09-15 13:44:02

尝试这样做,将配置移到外部执行,这样它就不会被绑定到生命周期阶段。

代码语言:javascript
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>1.0.1</version>
    <executions>
        <execution>
            <id>enforce-versions</id>
            <goals>
                <goal>enforce</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <rules>
            <AlwaysPass />
        </rules>
        <fail>true</fail>
    </configuration>
</plugin>

现在,当您执行mvn enforcer:enforce时,它会从您的pom.xml中选择规则。

票数 21
EN

Stack Overflow用户

发布于 2015-09-16 11:01:03

看这些答案

您可以使用特殊的默认命令行执行id ( default )来调用它(请参阅Maven Docs),请参见下面的示例。这至少适用于3.1.1,引用的文章说,它应该与2.2.0+一起工作

代码语言:javascript
复制
mvn enforcer:enforce

但是,如果您使用的是上面的 Maven 3.1.1 (我可以确认它在3.3.3中与执行器v1.4.1一起工作),您可以使用新的@语法指定您希望的执行id (请参阅Maven JIRA和上面的答案);

例如,在下面的例子中使用

代码语言:javascript
复制
mvn enforcer:enforce@dependency-convergence

这是我的笔录上的一段片段;

代码语言:javascript
复制
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>1.4.1</version>
            <executions>
                <execution>
                    <id>dependency-convergence</id>
                    <phase>install</phase>
                    <goals>
                        <goal>enforce</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <DependencyConvergence />
                        </rules>
                        <fail>true</fail>
                    </configuration>
                </execution>
                <execution>
                    <id>default-cli</id>
                    <goals>
                        <goal>enforce</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <DependencyConvergence/>
                        </rules>
                        <fail>true</fail>
                    </configuration>
                </execution>
            </executions>
        </plugin>
      ...
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6754974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档