利用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
<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初始配置的原因,具体的配置方式我还没有找到,要是有具体的配置更改步骤或者别的原因也请告知,在此感谢
我把main函数换成了@Test测试方法运行,代码可以正常的运行,在重新换成main函数就还是不行。这里时因为maven项目执行main函数方法时,需要引入两个插件:maven-compiler-plugin和exec-maven-plugin插件。
**maven-compiler-plugin :**对 Java 代码编译,可以指定项目源码的jdk版本,编译后的jdk版本,以及编码
exec-maven-plugin:用来执行class文件,其中插件配置中需指明执行类的路径。
这里只用关注exec-maven-plugin
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>
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属性使用。