博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导):Java Web工程转换为基于Maven的Web工程
1,首先浏览java web工程的结构如下:
2,开始转移文件,先 拷贝java文件
把java web工程 Java Resources目录下的src目录下的java文件都拷贝到maven工程中的Java Resources目录src/main/java目录下面 (这里最好仅仅拷贝的是java文件,但是资源文件也是可以放到这里的)
Ps:
1,如果java web项目 源目录分多个,在maven里面最好用一个src/main/java,把同包的java文件放在一起,保证类的package包路径不变。
2,当然也可以在maven web中配置多源目录,多资源目录,以及读取源目录资源文件等。
3,拷贝配置文件
把java web工程 Java Resources目录下的conf目录下的xml配置文件都拷贝到maven工程中的Java Resources目录src/main/resources目录下面
Ps:
1,配置文件包括所有非.java的文件,包括.xml , .properties等
2,工程所有配置文件,即使不在conf目录(只是当前项目的配置全放在了conf,其他项目不一定,要求全部的配置文件,包括src源目录里面包含的配置文件)
3,注意资源文件原本所在的包路径,要保持不变。
4,拷贝web文件(所有的webapp或者webcontent里面的文件)
把java web工程 Web Root目录下所有文件文件如下:
把java web工程 Web Root目录下所有文件文件都拷贝到maven工程中的webapp目录下面
到目前为止,java web项目转Maven项目的文件迁移工作全部完成,接下来要做的是个细活,体力活,把java web项目所有引用jar包,都加入到maven pom依赖中来。
5,添加POM依赖
首先需要去java web项目中查看都引用了哪些jar包,去java web工程 Java Resources目录下的Libraries查看:
Ps:
1,这里引用的jar如果在maven搜索库中找不到,或者jar属于自己封装的,那么就作为外部jar引入到pom文件中去,把所有的jar放在webapp/WEB-INF/lib目录中去。
上面只是截取了部分,其实很多,有七八十个jar包,这一个个查都得半天。不过除了一个一个查,也没有其他办法了。这里介绍下如何查maven依赖,比如我要查commons-io-2.4.jar对应的maven 依赖
首先登录maven repository官网http://mvnrepository.com,搜索这个包,如下:
看见结果中有2.4这个版本,点击进去,copy红框中的结果,将其粘贴进pom,其他剩下的就是这样一个一个查,一个一个添加。
过程中可能会碰到这种情况,在maven官网查不到你需要的那个jar包,这个时候,你需要把这个jar包加入到你的本地库,或者以后生产环境中的线上库。
如何加入本地库,进入你需要添加的jar包所在文件路径,然后指定group id和artifactId,如下:
mvn install:install-file -DgroupId=com.ibatis -DartifactId=ibatis -Dversion=1.0 -Dpackaging=jar -Dfile=E:/ibatis.jar -DgeneratePom=true
6,maven命令检查maven依赖以及项目是否有问题
mvn clean install
检查成功的结果:
[INFO] --- maven-install-plugin:2.4:install (default-install) @ BUGManager_maven ---
[INFO] Installing /Users/xiaolong/Documents/workspace/BUGManager_maven/target/BUGManager_maven-0.0.1-SNAPSHOT.war to /Users/xiaolong/Documents/repository/m2/repository/com/autonavi/rus/BUGManager_maven/0.0.1-SNAPSHOT/BUGManager_maven-0.0.1-SNAPSHOT.war
[INFO] Installing /Users/xiaolong/Documents/workspace/BUGManager_maven/pom.xml to /Users/xiaolong/Documents/repository/m2/repository/com/autonavi/rus/BUGManager_maven/0.0.1-SNAPSHOT/BUGManager_maven-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.861 s
[INFO] Finished at: 2016-01-23T16:01:10+08:00
[INFO] Final Memory: 34M/285M
[INFO] ------------------------------------------------------------------------
localhost:BUGManager_maven dddd$
出现错误后,查找正确的jar包,即可。
7,maven web的启动方式
1,tomcat:run
2,tomcat server服务添加
3,jetty运行
介绍jetty运行方式:首先在POM中添加jetty插件
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<webAppSourceDirectory>${basedir}/src/main/webapp</webAppSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
在工程上,单击鼠标右键,点击Rus As—>Maven Build… ,并在Goals中输入命令:jetty:run
点击RUN,可以成功启动maven web项目。
一些在转换过程中需要处理的问题:
问题1:引用外部jar的方式,这里是放到了webapp/WEB-INF/lib中
<dependency>
<groupId>dwr</groupId>
<artifactId>dwr</artifactId>
<version>2.0.6</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/dwr.jar</systemPath>
</dependency>
问题2:jar引用冲突
1,同一个pom文件中对同一个jar的引用只能有一个,不能同时引用多个版本的该jar。
2,暂时没用,并且发布后会跟tomcat容器中的jar冲突,那么找到那个jar依赖引用了这些jar,用exclusions排除掉就行了,如:
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>3.5.2</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>org.apache.santuario</groupId>
<artifactId>xmlsec</artifactId>
</exclusion>
</exclusions>
</dependency>
3,在项目测试编译阶段需要用一些jar,但是发布后会导致跟tomcat容器里的jar冲突,所以设置使用范围,如:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
问题3:当对maven项目update project 后,发现JDK还是默认的1.5这样的
解决方法是在pom.xml文件中设定maven项目的JDK版本,这样就不会有问题了
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<verbose />
<bootclasspath>${java.home}\lib\rt.jar;${java.home}\lib\jce.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>