转自:http://blog.sina.com.cn/s/blog_4adc4b090102uxgv.html
我们都知道,在一个典型的Maven项目中,编译后的class文件默认是放在targert/classes目录下的。但是我今天碰到一个比较奇怪的问 题,在Eclipse中我通过import exsiting maven projects的方法,导入了2个maven的project,一个是非web project,另一个是web project。 在web project的target classes中,并没有我们期望的Class文件,所以部署到Eclipse的tomcat中时,在WEB-INF/classes中也没有对应的 Class类。可能的原因有如下多个原因,希望大家可以对号入座:
1. 执行maven的命令,mvn clean install -DskipTests可以编译成功,在target/classes中可以看到相关的Class文件,但是如果在Project/Clean中 clean相关的Project时,还需要重新使用mvn clean install -DskipTests重新生成Class文件(target/classes会被删除)
2. 执行mvn eclipse:clean eclipse:eclipse命令,并刷新后可以看到该 Maven的Project变成了一个真正的常规的java的web project(在Project的icon上后有一个小圆球),这时,即使是使用Project/Clean后,也会在test/classes中重新 自动生成Class类文件。但是你可能会碰到一个更加严重的问题,就是在Eclipse的Tomcat的wtpwebapps目录中不会有该web项目, 换句话说,就是该项目不能被成功的部署到Eclipse的Tomcat中,这很有可能的原因是Deployment Assembly(程序部署集)或者是Project Facets属性存在问题,参照该篇博文以解决怎样设置Project Facets或者是Deployment Assembly,我碰到的问题是Deployment Assembly属性不存在,当我参照该博文(http://josh-persistence.iteye.com/admin/blogs /1926808)将Deployment Assembly配置成功后,部署也成功了。
另外除了上面我碰到的原因之外,实际开发中,你有还可能存在如下的原因:
在开始之前,查看Eclipse的problems view,里面可能会告诉相关的错误的原因,一般来说,可能有如下几种情况:
1). 确保 project->build automatically已经被选上.
2). project->clean..->选第2个clean select project, 勾上start build immediatelly
3). 删除现在的项目, 重新导入源文件,设置eclipse为保存时编译,然后在保存的时候就可以自动编译了
4). 如果项目里引了某个不用的jar包,而那个包又被你删了,就会出现不报错但怎么也编译不出来class文件的情况,可以把所有包都删除,然后一个一个的再引入(需要的),不要一下子把所有包都引入来,没用的可能会引起不良后果.
5). 想删掉某个class文件重新生成,删除class文件后,但classes目录下的文件夹被其它程序打开,比如SublineText。此时编译也不会 通过,在problems下可能会提示“con''t delete classes ……”。关掉其它程序重新编译即可。
6). remove掉 JRE System Library,重新导入即可编译。
7). 把build path中所有包都remove掉。然后又add jars,add libraries把需要的加进去。
8). project->properties->java build path->source->.../WEB-INF/src的output folder不要默认,编辑让它指向../WEB-INF/classes然后重新点击build工程即可自动编译。
9). 如果你的项目是CVS进行版本控制的项目,查看工程下面是否缺少了work目录,由于CVS控制时不把work加如版本,所以 checkout后没有这个目录,要手工加上有的工程就能自动编译了
我们都知道,在一个典型的Maven项目中,编译后的class文件默认是放在targert/classes目录下的。但是我今天碰到一个比较奇怪的问 题,在Eclipse中我通过import exsiting maven projects的方法,导入了2个maven的project,一个是非web project,另一个是web project。 在web project的target classes中,并没有我们期望的Class文件,所以部署到Eclipse的tomcat中时,在WEB-INF/classes中也没有对应的 Class类。可能的原因有如下多个原因,希望大家可以对号入座:
1. 执行maven的命令,mvn clean install -DskipTests可以编译成功,在target/classes中可以看到相关的Class文件,但是如果在Project/Clean中 clean相关的Project时,还需要重新使用mvn clean install -DskipTests重新生成Class文件(target/classes会被删除)
2. 执行mvn eclipse:clean eclipse:eclipse命令,并刷新后可以看到该 Maven的Project变成了一个真正的常规的java的web project(在Project的icon上后有一个小圆球),这时,即使是使用Project/Clean后,也会在test/classes中重新 自动生成Class类文件。但是你可能会碰到一个更加严重的问题,就是在Eclipse的Tomcat的wtpwebapps目录中不会有该web项目, 换句话说,就是该项目不能被成功的部署到Eclipse的Tomcat中,这很有可能的原因是Deployment Assembly(程序部署集)或者是Project Facets属性存在问题,参照该篇博文以解决怎样设置Project Facets或者是Deployment Assembly,我碰到的问题是Deployment Assembly属性不存在,当我参照该博文(http://josh-persistence.iteye.com/admin/blogs /1926808)将Deployment Assembly配置成功后,部署也成功了。
另外除了上面我碰到的原因之外,实际开发中,你有还可能存在如下的原因:
在开始之前,查看Eclipse的problems view,里面可能会告诉相关的错误的原因,一般来说,可能有如下几种情况:
1). 确保 project->build automatically已经被选上.
2). project->clean..->选第2个clean select project, 勾上start build immediatelly
3). 删除现在的项目, 重新导入源文件,设置eclipse为保存时编译,然后在保存的时候就可以自动编译了
4). 如果项目里引了某个不用的jar包,而那个包又被你删了,就会出现不报错但怎么也编译不出来class文件的情况,可以把所有包都删除,然后一个一个的再引入(需要的),不要一下子把所有包都引入来,没用的可能会引起不良后果.
5). 想删掉某个class文件重新生成,删除class文件后,但classes目录下的文件夹被其它程序打开,比如SublineText。此时编译也不会 通过,在problems下可能会提示“con''t delete classes ……”。关掉其它程序重新编译即可。
6). remove掉 JRE System Library,重新导入即可编译。
7). 把build path中所有包都remove掉。然后又add jars,add libraries把需要的加进去。
8). project->properties->java build path->source->.../WEB-INF/src的output folder不要默认,编辑让它指向../WEB-INF/classes然后重新点击build工程即可自动编译。
9). 如果你的项目是CVS进行版本控制的项目,查看工程下面是否缺少了work目录,由于CVS控制时不把work加如版本,所以 checkout后没有这个目录,要手工加上有的工程就能自动编译了