学习maven时,尝试将javaee项目分成两个模块,总项目为server-side,其下面有两个子模块:web-lib和web-apps,其中web-lib只是保存所有的依赖的并没有任何的代码逻辑,web-apps才是真正的web项目。另外web-lib和web-apps均继承自server-side,web-apps依赖web-lib。其pom文件如下:
server-side pom.xml
web-lib pom.xml
web-apps pom.xml
下面说一下今天遇到的问题,原来的项目是一个ssh项目,各种配置实用的xml文件,我今天想尝试实用annotation的方法配置,那么首先我就需要把hibernate-annotataions添加到项目中,前面也说了我的web-lib项目是用来保存所有的依赖的maven项目,所有就将该依赖添加到web-lib的pom项目下了,然后更改相关代码。然后运行我的web-apps项目,就出现错误了。报出找不到类的错误
Caused by: java.lang.ClassNotFoundException: javax.persistence.Entity
然后整个一下午都在纠结这个问题,搜索了各种相关错误,各种百度谷歌,说是缺少一些jar包,但这些这些jar都在我项目里啊,可以通过eclipse看到这些依赖包的,怎么添加都报错,我将生成的web项目展开,发现hibernate-annotations及其的所有依赖包根据就没有添加在项目下,然后又各种头脑风暴,最后突然灵光一闪,我应该将整个项目install一下。然后就在server-sides上运行了mvn install方法,再次运行我的项目,终于不再出现错误了。
后来仔细想了想出错的原因,我的web-apps是依赖于web-lib的,然而maven依赖必须通过本地仓库或远程仓库才能找到依赖,我修改了web-lib项目的依赖但我的本地仓库仍是一样安装的web-lib项目,所以新添加的依赖会找不到。
[b]经过一下午的折磨,得出一个教训,对于分模块的maven项目,修改了项目的依赖等操作时一定要将这个项目install一下[/b]