maven支配web工程基础步骤
1.准备工作
下载maven(url:http://archive.apache.org/dist/maven/binaries/maven-2.0.3-bin.zip
),版本为2.0.3,最新版本为2.0.6
将maven-2.0.3解压缩到d盘根目录,添加环境变量Path,D:\maven-2.0.3\bin
修改D:\maven-2.0.3\conf\settings.xml设置,<localRepository>D:\WADS0.5\maven-2.0.4\maven\repository</localRepository>
D:\WADS0.5\maven-2.0.4\maven\repository为仓库文件物理路径
打开cmd窗口
D:\>mvn -version
Maven version: 2.0.3
表示maven安装成功
2.命令方式
D:\>mvn archetype:create -DgroupId=org.fengzhong.comf -DartifactId=fzvideo -DarchetypeArtifactId=maven-archetype-webapp
...
[INFO] Archetype created in dir: D:\fzvideo
[INFO] ------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Fri Oct 17 14:45:42 CST 2008
[INFO] Final Memory: 4M/7M
[INFO] ------------------------------------
(因为maven在执行过程中需要一些jar文件支持,如果localRepository设定目录下面没有这些文件,会自动去下载,如果网络连接有问题,会导致创建失败)
org.fengzhong.comf是目录名称
fzvideo是工程名称
命令成功执行之后:得到目录结构
fzvideo
pom.xml
src
main
java(手动建立)
resources
webapp
拷贝工程的源代码到java目录下面
拷贝工程的资源文件到resources目录下面
拷贝工程的发布文件到webapp目录下面
D:\>cd fzvideo
D:\fzvideo>mvn package
...
[INFO] Exploding webapp...
[INFO] Copy webapp webResources to D:\fzvideo\target\fzvideo
[INFO] Assembling webapp fzvideo in D:\fzvideo\target\fzvideo
[INFO] Generating war D:\fzvideo\target\fzvideo.war
[INFO] Building war: D:\fzvideo\target\fzvideo.war
[INFO] ------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------
[INFO] Total time: 5 seconds
[INFO] Finished at: Fri Oct 17 14:50:10 CST 2008
[INFO] Final Memory: 3M/7M
[INFO] ------------------------------------
打包完成后:D:\fzvideo\target生成target目录
fzvideo
pom.xml
src
...
target
classes
fzvideo
fzvideo.war(即为打包成功发布文件,直接放到容器中运行,例如:tomcat webapps下面)
3.eclipse插件方式(默认工程结构符合maven格式)
菜单Run->External Tools->External Tools
Program新增一个
Location:D:\maven-2.0.3\bin\mvn.bat(定位mvn.bat文件)
Working Directory:Browse Workspace 选择工程
Arguments:package -e
4.注意:打包过程中最好将test删掉( src/test/java),否则在执行过程中由于test测试通不过而无法打包成功.
src/main/java
src/main/resources
以上两个目录名称不能拼写错误,否则打包出现问题.
maven优点:由于在项目中使用maven仓库进行jar文件管理,pom.xml文件是maven核心,使用maven可以将pom.xml中定义的jar文件自动
拷贝到WEB-INF/lib下面,同时对java文件进行编译成class文件,和resources文件夹下面的资源文件自动拷贝到WEB-INF/classes下面,
将整个工程打包成war文件.
在开发的工程中可能会使用jdk1.5的注释或泛型,如:
@Override
@SuppressWarnings("unused")
@SuppressWarnings("deprecation")
Map<String, String> map = new HashMap<String, String>();
maven默认是使用低版本编译,mvn package -e 抛出如下一些异常:
D:\wap_build\src\main\java\org\fengzhong\wapbuild\util\FileUtil.java:[374,28] 需
要 ';'
D:\wap_build\src\main\java\org\fengzhong\wapbuild\util\FileUtil.java:[374,33] 非
法字符: \59272
D:\wap_build\src\main\java\org\fengzhong\wapbuild\util\FileUtil.java:[374,39] 非
法字符: \58933
D:\wap_build\src\main\java\org\fengzhong\wapbuild\util\FileUtil.java:[374,45] 非
法字符: \65533
D:\wap_build2.5.1\src\main\java\org\fengzhong\wapbuild\action\news\SaveNewsIssue
ContentAction.java:[295,25] -source 1.3 中不支持注释
(请尝试使用 -source 1.5 以启用注释)
@SuppressWarnings("unused")
D:\wap_build2.5.1\src\main\java\org\fengzhong\wapbuild\service\research\impl\Mob
ileResearchServiceImpl.java:[165,19] -source 1.3 中不支持泛型
(请尝试使用 -source 1.5 以启用泛型)
Map<String, String> map = new HashMap<String, String>();
D:\wap_build\src\main\java\org\fengzhong\wapbuild\util\StringUtils.java:[134,36]
需要 ';'
D:\wap_build\src\main\java\org\fengzhong\wapbuild\util\StringUtils.java:[134,41]
非法字符: \59272
D:\wap_build\src\main\java\org\fengzhong\wapbuild\util\StringUtils.java:[134,47]
非法字符: \58933
D:\wap_build\src\main\java\org\fengzhong\wapbuild\util\StringUtils.java:[134,53]
非法字符: \65533
D:\wap_build\src\main\java\org\fengzhong\wapbuild\service\product\impl\ProjectIm
pl.java:[135,20] -source 1.3 中不支持泛型
(请尝试使用 -source 1.5 以启用泛型)
List<Channel> temp2 = new ArrayList<Channel>();
说明:FileUtil.java和StringUtils.java在工程中没有问题,在类中写了main函数方法。
解决方法:需要对pom.xml配置plugin,
如果工程中的jar文件都是统一由maven管理,配置:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
就可以了,否则需要指定jar的物理位置:
<compilerArguments>
<extdirs>D:\wap_build\src\main\webapp\WEB-INF\lib</extdirs>
</compilerArguments>
lib默认一般放在工程~\WEB-INF\下面,同时也方便打包时将lib加入war文件中。
如果既没有使用maven管理jar,也没有指定compilerArguments ~ extdirs ~ lib配置路径,在编译时会抛出如:
D:\wap_build\src\main\java\org\fengzhong\wapbuild\action\common\MainAction.java:
[3,30] 软件包 com.opensymphony.xwork 不存在
D:\wap_build\src\main\java\org\fengzhong\wapbuild\action\common\MainAction.java:
[5,32] 找不到符号
符号: 类 ActionSupport
public class MainAction extends ActionSupport{
... 等找不到软件包或符号异常。
打开pom.xml文件,配置jdk1.5编译,例如完整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 > org.fengzhong.wapbuild </ groupId >
- < artifactId > wap_build </ artifactId >
- < packaging > war </ packaging >
- < version > 1.0-SNAPSHOT </ version >
- < name > wap_build Maven Webapp </ name >
- < url > http://maven.apache.org </ url >
- < dependencies >
- < dependency >
- < groupId > junit </ groupId >
- < artifactId > junit </ artifactId >
- < version > 3.8.1 </ version >
- < scope > test </ scope >
- </ dependency >
- </ dependencies >
- < build >
- < plugins >
- < plugin >
- < artifactId > maven-compiler-plugin </ artifactId >
- < configuration >
- < source > 1.5 </ source >
- < target > 1.5 </ target >
- < encoding > UTF-8 </ encoding >
- < compilerArguments >
- < extdirs > D:\wap_build\src\main\webapp\WEB-INF\lib </ extdirs >
- </ compilerArguments >
- </ configuration >
- </ plugin >
- </ plugins >
- </ build >
- </ project >
都配置好的情况下:mvn package -e
...
[INFO] Generating war D:\wap_build\target\wap_build-1.0-SNAPSHOT.war
[INFO] Building war: D:\wap_build\target\wap_build-1.0-SNAPSHOT.war
[INFO] ------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------
[INFO] Total time: 28 seconds
[INFO] Finished at: Wed Aug 12 08:52:54 GMT 2009
[INFO] Final Memory: 4M/34M
[INFO] ------------------------------------
在创建的wap_build第一级目录target\下面就可以找到以pom.xml文件中: artifactId-version.war命名的部署文件了。
命令索引:
D:\>mvn
archetype:create -DgroupId=org.fengzhong.wapbuild -DartifactId=wap_build
-DarchetypeArtifactId=maven-archetype-webapp
D:\>cd wap_build
D:\wap_build>mvn package -e
目录索引:
- D:/
- wap_build
- src
- \main\java ...工程中的java文件
- \main\resources ...工程中的资源文件
- \main\webapp ...工程中的页面文件(如:jsp,html,styles/css,js,images,WEB-INF/classes,WEB-INF/lib,WEB-INF/web.xml)
- target(BUILD SUCCESSFUL通过之后才会生成,一般重新生成时,最好把该目录删除)
- classes(编译后的类路径)
- wap_build-1.0-SNAPSHOT ---部署文件夹
- wap_build-1.0-SNAPSHOT.war ---部署文件war
- pom.xml