学习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项目,就出现错误了。报出找不到类的错误
然后整个一下午都在纠结这个问题,搜索了各种相关错误,各种百度谷歌,说是缺少一些jar包,但这些这些jar都在我项目里啊,可以通过eclipse看到这些依赖包的,怎么添加都报错,我将生成的web项目展开,发现hibernate-annotations及其的所有依赖包根据就没有添加在项目下,然后又各种头脑风暴,最后突然灵光一闪,我应该将整个项目install一下。然后就在server-sides上运行了mvn install方法,再次运行我的项目,终于不再出现错误了。
后来仔细想了想出错的原因,我的web-apps是依赖于web-lib的,然而maven依赖必须通过本地仓库或远程仓库才能找到依赖,我修改了web-lib项目的依赖但我的本地仓库仍是一样安装的web-lib项目,所以新添加的依赖会找不到。
[b]经过一下午的折磨,得出一个教训,对于分模块的maven项目,修改了项目的依赖等操作时一定要将这个项目install一下[/b]
server-side pom.xml
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>zwh.ssh.maven</groupId>
<artifactId>server-side</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>server-side Maven Webapp</name>
<url>http://maven.apache.org</url>
<build>
<finalName>server-side</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<modules>
<module>web-lib</module>
<module>web-apps</module>
</modules>
</project>
web-lib pom.xml
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>zwh.ssh.maven</groupId>
<artifactId>server-side</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>web-lib</artifactId>
<packaging>jar</packaging>
<name>web-lib Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- 这里定义了很多依赖,与前面的文章基本相同,这里就省略了 -->
</dependencies>
<build>
<finalName>web-lib</finalName>
</build>
</project>
web-apps pom.xml
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>zwh.ssh.maven</groupId>
<artifactId>server-side</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>web-apps</artifactId>
<packaging>war</packaging>
<name>web-apps Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>zwh.ssh.maven</groupId>
<artifactId>web-lib</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>web-apps</finalName>
<plugins>
<!-- jetty是一个servlet容器,类似于tomcat,配置该plugin之后,可以在项目中
调用mvn jetty:run-war直接运行这个web项目,默认端口是8080。plugin如果不添加version会报出WARNING -->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
</plugin>
</plugins>
</build>
</project>
下面说一下今天遇到的问题,原来的项目是一个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]