【问题标题】:How do you properly execute "mvn clean" inside a project?您如何在项目中正确执行“mvn clean”?
【发布时间】:2015-07-11 17:53:24
【问题描述】:

我正在尝试清理、构建和打包我的项目,但我不断收到此错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.6.1:clean (auto-clean) on project Presentation: Unable to parse configuration of mojo org.apache.maven.plugins:maven-clean-plugin:2.6.1:clean for parameter retryOnError: Cannot find 'retryOnError' in class org.apache.maven.plugin.clean.CleanMojo -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.6.1:clean (auto-clean) on project Presentation: Unable to parse configuration of mojo org.apache.maven.plugins:maven-clean-plugin:2.6.1:clean for parameter retryOnError: Cannot find 'retryOnError' in class org.apache.maven.plugin.clean.CleanMojo
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:220)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:108)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:76)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:116)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:361)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginConfigurationException: Unable to parse configuration of mojo org.apache.maven.plugins:maven-clean-plugin:2.6.1:clean for parameter retryOnError: Cannot find 'retryOnError' in class org.apache.maven.plugin.clean.CleanMojo
    at org.apache.maven.plugin.internal.DefaultMavenPluginManager.populatePluginFields(DefaultMavenPluginManager.java:605)
    at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:537)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:120)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
... 19 more
Caused by: org.codehaus.plexus.component.configurator.ComponentConfigurationException: Cannot find 'retryOnError' in class org.apache.maven.plugin.clean.CleanMojo
    at org.eclipse.sisu.plexus.CompositeBeanHelper.setProperty(CompositeBeanHelper.java:252)
    at org.codehaus.plexus.component.configurator.converters.composite.ObjectWithFieldsConverter.processConfiguration(ObjectWithFieldsConverter.java:101)
    at org.codehaus.plexus.component.configurator.BasicComponentConfigurator.configureComponent(BasicComponentConfigurator.java:32)
    at org.apache.maven.plugin.internal.DefaultMavenPluginManager.populatePluginFields(DefaultMavenPluginManager.java:575)
... 22 more

一段时间以来,我一直在尝试自己解决这个问题。我将项目设置为自动清理,这正是 Apache 在 pom 文件中指示这样做的方式,但我也会将其包括在内。

<project>
    <build>
        ...
        <plugin>
            <artifactId>maven-clean-plugin</artifactId>
            <version>2.6.1</version>
            <configuration>
                <failOnError>false</failOnError>
            </configuration>
            <executions>
                <execution>
                    <id>auto-clean</id>
                    <phase>initialize</phase>
                    <goals>
                        <goal>clean</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        ...
    </build>
<project>

我在这里迷路了。显然,它与“retryOnError”有关,但这不是我自己添加的。我在哪里可以找到那个?

另外,如果有帮助,我正在使用 Maven 3.2.5。

【问题讨论】:

  • 你真的需要一个“插件”来清理吗?我认为mvn clean 可以解决问题......并且为了您的目的,执行(在项目的根级别)mvn clean packagemvn clean verify 就足够了
  • 这就是我最初想要做的。 mvn clean package 导致同样的错误,mvn clean verify 也是一样。
  • 堆栈跟踪是因为maven-clean-plugin;你能评论那部分并尝试mvn clean吗?
  • 当我这样做时,它说“build.plugins.plugin.artifactid”丢失。
  • 评论必须来自&lt;!-- &lt;plugin&gt; ... &lt;/plugin&gt; --&gt;;看起来你是从&lt;artifactId&gt; 开始的

标签: java maven maven-lifecycle


【解决方案1】:

看起来您明确配置的 clean 插件的版本与 maven 附带的版本不同(或默认属性中的类似不匹配)

正如上面的 cmets 建议的那样,我将删除整个部分:

<plugin>
    <artifactId>maven-clean-plugin</artifactId>
    <version>2.6.1</version>
    <configuration>
        <failOnError>false</failOnError>
    </configuration>
    <executions>
        <execution>
            <id>auto-clean</id>
            <phase>initialize</phase>
            <goals>
                <goal>clean</goal>
            </goals>
        </execution>
    </executions>
</plugin>

然后运行 ​​mvn clean / mvn clean 包。

如果您设置使用插件,您还应该尝试在配置中手动设置属性,如下所示:

<plugin>
    <artifactId>maven-clean-plugin</artifactId>
    <version>2.6.1</version>
    <configuration>
        <failOnError>false</failOnError>
        <retryOnError>true</retryOnError>
    </configuration>
    <executions>
        <execution>
            <id>auto-clean</id>
            <phase>initialize</phase>
            <goals>
                <goal>clean</goal>
            </goals>
        </execution>
    </executions>
</plugin>

【讨论】:

  • 这仍然不起作用 :( 我得到相同的堆栈跟踪,无论是注释掉 plugin 并运行 mvn clean 还是添加 &lt;retryOnError&gt; 参数。
  • 你能在 GitHub 或类似的地方分享代码吗?你不应该得到相同的堆栈跟踪,因为它与你没有的东西有关(假设你评论了你的 &lt;plugin&gt; maven-clean-plugin 声明)
  • 我不能分享它,它是商业软件。这是让自己被解雇的好方法。 ;) 不过,我可以告诉你这一点,当我从 Eclipse 中清理时,它会毫无问题地做到这一点。它只是来自命令行或 Apache 的 maven-invoker,当我不包含插件时,其他一切都有效。只有干净的才是破碎的。
  • 嗯,谢谢你的回答。这有助于更多地了解 Maven,因此很有帮助!再次感谢。
  • 到底是什么坏了? maven-invoker-plugin?为什么在 maven-clean-plugin 中需要这样的补充选项?
【解决方案2】:

@ɐuıɥɔɐɯ 是对的。

我还会尝试删除 pom.xml 中的自动清理插件配置,因为找出它导致问题的原因可能比它值得做的工作更多。现在,我只需在项目的根文件夹中运行以下命令:

mvn clean package

这应该运行您的 pom.xml 中列出的目标,并清理您的“目标”子目录,将其替换为最新的代码。

更多信息请参见http://www.mkyong.com/maven/how-to-clean-project-with-maven/

【讨论】:

  • clean 是一个被调用的生命周期。 maven-clean-plugin 默认绑定到这个生命周期(clean),这意味着它被执行。 clean package 没有内置工具,这只是执行的生命周期。
  • 感谢您为我和其他所有人澄清这一点。我已经相应地编辑了我的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2012-11-17
  • 2011-10-06
  • 1970-01-01
  • 2019-06-17
相关资源
最近更新 更多