maven初识

来源:互联网 发布:高通编译linux 编辑:程序博客网 时间:2024/05/22 09:27
问题特征


使用IDE(文本以Eclipse为例)集成Maven开发项目,执行Maven的clean命令后


,原来编译的结果被清掉,然后在编辑、编译源代码或运行时报“xxx 


.class cannot be resolved to a type”错误,Eclipse的Package 


Explorer窗口出现大量的红叉。同时上层依赖项目也出现红叉,感觉整个


Eclipse都要崩溃了。


原因


这种现象是被Eclipse之外的命令清除了结果,Eclipse不能找到编译文件,


因此需要重新编译。


解决办法


Eclipse菜单中找到Project -> Build automatically,并确定是勾选的,其


次点击Project -> Clean…菜单命令项,在弹出的对话框中找到工程,如果


是多个工程依赖开发,可以选择“Clean all projects”,然后点击“OK”


按钮。此过程Eclipse会清除项目中编译的.class文件,同时重新编译工程(


类似于jBuild中的Rebuild功能)。


详细解释


1.我们知道,Maven可以托管项目的整个生命周期,它从验证、源代码管理、


编译、测试、打包、分发、部署(安装)整个系列过程都会参与。


2.Maven默认的编译结果是target目录下,m2e插件将Eclipse默认的编译结果


由默认的bin重置到了target目录,两者共用一个编译结果目录,并且都具有


编译角色,因此Maven的clean命令实际也把Eclipse的编译结果清除了。


3.在代码编写阶段,Eclipse就需要被调用类的编译结果,用来语法检查、代


码提示。被Maven clean后,又不能及时自动编译(尤其是多项目依赖),当


然报错。


当然,实践过程中,首要是排除项目中的错误,如果项目中存在错误,


Eclipse也不会自动编译的。通过Problems窗口可以看到错误报告(可在菜单


Windows -> show views中找到并显示),报告中有错误,务必先修复,否则


无法强制Eclipse编译。


一般情况下,自己代码语法错误较少,Maven项目错误大部分都是pom.xml配


置引起的,所以必须学习好Maven。


2 . maven的clean问题:
在Maven项目中进行单元测试,但mvn clean后重新mvn install项目,再次进


行单元测试,会有以下的错误,Class not found 


com.core.order.service.impl.OrderServic
在Maven项目中进行单元测试,但mvn clean后重新mvn install项目,再次进


行单元测试,会有以下的错误,,


<span style="font-family:KaiTi_GB2312;font-size:18px;">Class not 


found com.core.order.service.impl.OrderServiceImplTest 


java.lang.ClassNotFoundException: 


com.core.order.service.impl.OrderServiceImplTest at 


java.net.URLClassLoader$1.run(URLClassLoader.java:366) at 


java.net.URLClassLoader$1.run(URLClassLoader.java:355) at 


java.security.AccessController.doPrivileged(Native Method) at 


java.net.URLClassLoader.findClass(URLClassLoader.java:354) at 


java.lang.ClassLoader.loadClass(ClassLoader.java:423) at 


sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at 


java.lang.ClassLoader.loadClass(ClassLoader.java:356) at 


org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass


(RemoteTestRunner.java:693) at 


org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses


(RemoteTestRunner.java:429) at 


org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests


(RemoteTestRunner.java:452) at 


org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests


(RemoteTestRunner.java:683) at 


org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run


(RemoteTestRunner.java:390) at 


org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main


(RemoteTestRunner.java:197)</span>
主要是因为mvn install时,默认会排除打包测试类,导致工程中的测试类 


没有编译成.class文件,所以才会报上述错误。


因此,可以通过


eclipse->project->clean 


重新编译下,再次运行单元测试就可以成功了。
0 0
原创粉丝点击