Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0

1.问题描述

利用maven导包,运行Mybatis案例的main函数时报错。

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:exec (default-cli) on project mybatis_annotation: Command execution failed.: Process exited with an error: 1 (Exit value: 1) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

2.解决办法(三种可参考的方法)

方法一:在pom.xm中添加以下内容-----exec-maven-plugin
 <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
<!--                <executions>-->
<!--                    <execution>-->
<!--                        <goals>-->
<!--                            <goal>java</goal>-->
<!--                        </goals>-->
<!--                    </execution>-->
<!--                </executions>-->
                <configuration>
                    <classpathScope>test</classpathScope>
<!--                    <mainClass>com.itheima.test.MybatisTest</mainClass>-->
                </configuration>
            </plugin>
        </plugins>
    </build>

  注释部分可以不加

方法二:修改代码

备注:添加了之后有时候也会出现这个报错, **查看主函数里的代码部分是否有错误。**如资源关闭放在了调用方法的前面等等。

方法三:把参考源码里面的.idea文件替换自己创建maven项目内的.idea文件。

这个方法还可以解决中文乱码问题,从这可以看出应该是idea初始配置的原因,具体的配置方式我还没有找到,要是有具体的配置更改步骤或者别的原因也请告知,在此感谢




3.分析原因

  我把main函数换成了@Test测试方法运行,代码可以正常的运行,在重新换成main函数就还是不行。这里时因为maven项目执行main函数方法时,需要引入两个插件:maven-compiler-plugin和exec-maven-plugin插件。
**maven-compiler-plugin :**对 Java 代码编译,可以指定项目源码的jdk版本,编译后的jdk版本,以及编码
exec-maven-plugin:用来执行class文件,其中插件配置中需指明执行类的路径。
这里只用关注exec-maven-plugin

4.调用数据库中文乱码问题

1.第一种:在setting->maven->Runner->VM Options
  一栏中填入 -Dfile.encoding=gb2312
  第一种就不乱码了,第二种方法不行,不过我觉得在别的地方会用到,这里先码一下
2.第二种:pom.xml种添加

<properties>
	<!-- 文件拷贝时的编码 -->
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<!-- 编译时的编码 -->
    <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>

5.内部标签分析

1.< goal >
  exec主要由两个goal组成:exec:exec和exec:java。你应该如何选择呢?首先,你需要记住,exec:exec总是比exec:java强大而灵活,除此之外,两者的主要区别是在线程管理上:exec:exec总是启动一个新的线程,并且在只剩下守护线程的时候从VM上退出(关闭应用程序)。而对于exec:java,当所有非守护线程结束时,守护线程会被joine或interrupt,应该程序不会关闭。但是对于一般的使用者来说,这种差别并不重要。对于两者的选择,一般来说,如果你的工程启动非常简单,不需要设置jvm参数、系统属性、命令行参数,那么就用exec:java,

2.< classpathScope >
compile
  默认就是compile,什么都不配置也就是意味着compile。compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。

test
  scope为test表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。比较典型的如junit。

runntime
  runntime表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译而已,说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。比较常见的如JSR×××的实现,对应的API jar是compile的,具体实现是runtime的,compile只需要知道接口就足够了。oracle jdbc驱动架包就是一个很好的例子,一般scope为runntime。另外runntime的依赖通常和optional搭配使用,optional为true。我可以用A实现,也可以用B实现。

provided
  provided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。

system
  从参与度来说,也provided相同,不过被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用。

猜你喜欢

转载自blog.csdn.net/weixin_45773603/article/details/105883894