1.创建一个maven project
(eclipse的就不说了)
mvn archetype:generate 固定
-DgroupId 组织标识(包名)
-DartifactId 项目名称
-DarchetypeArtifactId:
Archetype ID | 说明 |
---|---|
maven-archetype-archetype | 一个样例原型 |
maven-archetype-j2ee-simple | 简单的J2EE应用程序样例 |
maven-archetype-mojo | Maven插件样本的示例 |
maven-archetype-plugin | Maven插件样本 |
maven-archetype-plugin-site | Mave插件网站的样例 |
maven-archetype-portlet | JSR-268门户样例 |
maven-archetype-quickstart | Maven工程样例 |
maven-archetype-simple | 一个简单的Maven工程 |
maven-archetype-site | Maven网站的样例,它演示了对诸如APT、XDoc和FML等文档类型的支持,并演示了如果把网站国际化(i18n) |
maven-archetype-site-simple | Maven网站样例 |
maven-archetype-webapp | Maven的Webapp工程样例 |
其中 maven-archetype-webapp:Maven的Webapp工程样例和
maven-archetype-quickstart:Maven工程样例比较常用
-DinteractiveMode:false/true 是否使用交互模式 表示是否使用交互模式,交互模式会让用户填写版本信息之类的,非交互模式采用默认值
2.构建与打包常用
命令 | 说明 |
---|---|
mvn compile | 编译源代码 |
mvn test | 运行测试 |
mvn clean | 他会清空目录下的target文件夹 |
mvn site-deploy | 生产站点目录并打包 |
mvn install | 安装当前工程的包输出文件到本地仓库 |
mvn package | 打包 |
mvn jar:jar | 打成jar包 |
生成eclipse项目 | mvn eclipse:eclipse |
mvn help:help | 查看帮助信息 |
3.Maven一些配置
指定Maven的本地库:修改conf \ setting.xml
<localRepository>存放路径</localRepository >
指定Maven源
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
项目依赖:
B添加对A的依赖
<dependency>
<groupId>com.project</groupId>
<artifactId>project.A</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
C添加对B的依赖,同时排除对A的依赖:
<dependency>
<groupId>com.project</groupId>
<artifactId>project.B</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.project</groupId>
<artifactId>project.A</artifactId>
</exclusion>
</exclusions>
</dependency>
parent聚合A、B、C三个项目(parent项目的包类型必须是pom)
<modules>
<module>../project.A</module>
<module>../project.B</module>
<module>../project.C</module>
</modules>
A、B、C分别关联parent项目
<parent>
<groupId>com.project</groupId>
<artifactId>project.parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
这样A、B、C都能使用parent依赖的jar包。
Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。
<properties>
<servlet.version>2.5</servlet.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
然后在子项目里就可以添加servlet-api时可以不指定版本号,例如:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</dependency>
</dependencies>
dependencies相对于dependencyManagement,所有声明在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
exclusions(排除依赖)
假设A-->B,B-->C,但是A不想依赖C,就可以在A中配置依赖B时,排除对C的依赖
<dependency>
<groupId>project.B</groupId>
<artifactId>project.B</artifactId>
<version>${version}</version>
<exclusions>
<exclusion>
<groupId>project.C</groupId>
<artifactId>project.C</artifactId>
</exclusion>
</exclusions>
</dependency>
optional(可选依赖)
假设A-->B,B-->C,但是A不想依赖C,就可以在B中配置,对C的依赖不进行传递
<dependencies>
<dependency>
<groupId>ProjectB</groupId>
<artifactId>Project-B</artifactId>
<version>1.0</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
</dependencies>
对上述scope属性的说明
scope的分类
compile
默认就是compile,什么都不配置也就是意味着compile。compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。
test
scope为test表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。比较典型的如junit。
runntime
runntime表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译而已,说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。比较常见的如JSR×××的实现,对应的API jar是compile的,具体实现是runtime的,compile只需要知道接口就足够了。oracle jdbc驱动架包就是一个很好的例子,一般scope为runntime。另外runntime的依赖通常和optional搭配使用,optional为true。我可以用A实现,也可以用B实现。
provided
provided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。
system
从参与度来说,也provided相同,不过被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用。
3.Tomcat部署项目
- 将项目拷贝到webapps下,然后启动服务器,Tomcat启动时将自动加载应用。这种方式比较简单,但是web应用程序必须在webapps目录下。Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用。
- 修改Server.xml文件部署
这种方式可以不必将项目拷贝到webapps下。方法如下,更改$CATALINA_HOME/conf/server.xml文件,
找到以下内容:
<Context path ="/wjw" reloadable ="false" docBase ="" workDir ="" />
path:是访问时的根地址,表示访问的路径;如上述例子中,访问该应用程序地址如下:http://localhost:8080/wjw/
reloadable:表示可以在运行时在classes与lib文件夹下自动加载类包。其中reloadable=”false”表示当应用程序 中的内容发生更改之后服务器不会自动加载,这个属性在开发阶段通常都设为true,方便开发,在发布阶段应该设置为false,提高应用程序的访问速度。
docbase:表示应用程序的路径。docBase可以使用绝对路径,也可以使用相对路径,相对路径相对于webapps。
workdir:表示缓存文件的放置地址。
3. 增加自定义web部署文件(推荐使用,不需要重启Tomcat )
这种方式和方法2差不多,但不是在Server.xml文件中添加Context标签,而是在conf /Catalina/localhost中添加一个xml文件,如wjw.xml.在Tomcat安装目录,各参数参见方法2中的标签的参数,或者你也可以自己新建一个XML文件。(注意此文件名将作为Context中的path属性值,不管文件里的path属性值如何设置也是无效的 ),将以下内容复制过去,修改相应路径即可。
Xml代码:
<Context path ="" docBase =""
debug ="0" privileged ="true" reloadable ="false" >
</Context>
debug是设定debug level, 0表示提供最少的信息,9表示提供最多的信息
privileged设置为true的时候,才允许Tomcat的Web应用使用容器内的Servlet。
注:这些项目可以是war包,当是war包时它会自动解压,可以在server.xml中设置unpackWARs=”false” 就不自动解压了。
- Tomcat manger部署
在tomcat下修改conf/tomcat-users.xml,添加用户
<role rolename="manager-gui"/>
<user username="wjw" password="123456" roles="manager-gui"/>
访问localhost:8080
选择Manger App
Context Path:项目的访问根地址
XML Configuration file URL:需要使用的配置文件
WAR or Directory URL :项目的地址,相当于上传
然后点击Deploy
注:关于用户的各种roles权限
manager-gui - allows access to the HTML GUI and the status pages
manager-script - allows access to the text interface and the status pages
manager-jmx - allows access to the JMX proxy and the status pages
manager-status - allows access to the status pages only