一、下载,官网下载。html
二、解压,存放路径中不可包含空格和中文。如:"E:\dev\workspace\maven\apache-maven-3.6.0"java
三、配置本地仓库,进入 "conf/settings.xml" 中,在 settings 节下开启以下配置,该路径就是指向本地仓库的路径:web
<localRepository>E:\dev\workspace\maven\repository</localRepository>
Maven 在查找 jar 时遵循什么样的顺序呢?spring
为方便使用,这里提供了已包含经常使用 jar 包的本地仓库,点击下载。apache
Maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,并且“相互独立”,这三套生命周期分别是:api
每个阶段都有一个对应的命令,且有相应的插件来支持命令的执行。tomcat
注:属于同一个命令周期内的命令,当执行后面的命令时,前面的命令会自动执行。服务器
ZHANGZHONGEN+zze@ZHANGZHONGEN MINGW64 /f/idea/0219/helloworld $ mvn compile [INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.zze:helloworld >------------------------- [INFO] Building helloworld Maven Webapp 1.0-SNAPSHOT [INFO] --------------------------------[ war ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ helloworld --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory F:\idea\0219\helloworld\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ helloworld --- [INFO] Nothing to compile - all classes are up to date [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.763 s [INFO] Finished at: 2019-02-21T15:22:51+08:00 [INFO] ------------------------------------------------------------------------
ZHANGZHONGEN+zze@ZHANGZHONGEN MINGW64 /f/idea/0219/helloworld $ mvn clean [INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.zze:helloworld >------------------------- [INFO] Building helloworld Maven Webapp 1.0-SNAPSHOT [INFO] --------------------------------[ war ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ helloworld --- [INFO] Deleting F:\idea\0219\helloworld\target [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.359 s [INFO] Finished at: 2019-02-21T15:27:50+08:00 [INFO] ------------------------------------------------------------------------
ZHANGZHONGEN+zze@ZHANGZHONGEN MINGW64 /f/idea/0219/helloworld $ mvn test [INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.zze:helloworld >------------------------- [INFO] Building helloworld Maven Webapp 1.0-SNAPSHOT [INFO] --------------------------------[ war ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ helloworld --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory F:\idea\0219\helloworld\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ helloworld --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ helloworld --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory F:\idea\0219\helloworld\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ helloworld --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to F:\idea\0219\helloworld\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ helloworld --- [INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.zze.test1.DemoTest 2 [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.019 s - in com.zze.test1.DemoTest [INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.414 s [INFO] Finished at: 2019-02-21T15:36:20+08:00 [INFO] ------------------------------------------------------------------------
ZHANGZHONGEN+zze@ZHANGZHONGEN MINGW64 /f/idea/0219/helloworld $ mvn package [INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.zze:helloworld >------------------------- [INFO] Building helloworld Maven Webapp 1.0-SNAPSHOT [INFO] --------------------------------[ war ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ helloworld --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory F:\idea\0219\helloworld\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ helloworld --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ helloworld --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory F:\idea\0219\helloworld\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ helloworld --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to F:\idea\0219\helloworld\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ helloworld --- [INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.zze.test1.DemoTest 2 [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.018 s - in com.zze.test1.DemoTest [INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] [INFO] --- maven-war-plugin:3.2.2:war (default-war) @ helloworld --- [INFO] Packaging webapp [INFO] Assembling webapp [helloworld] in [F:\idea\0219\helloworld\target\helloworld] [INFO] Processing war project [INFO] Copying webapp resources [F:\idea\0219\helloworld\src\main\webapp] [INFO] Webapp assembled in [44 msecs] [INFO] Building war: F:\idea\0219\helloworld\target\helloworld.war [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.752 s [INFO] Finished at: 2019-02-21T15:40:07+08:00 [INFO] ------------------------------------------------------------------------
ZHANGZHONGEN+zze@ZHANGZHONGEN MINGW64 /f/idea/0219/helloworld $ mvn install [INFO] Scanning for projects... [INFO] [INFO] -------------------------< com.zze:helloworld >------------------------- [INFO] Building helloworld Maven Webapp 1.0-SNAPSHOT [INFO] --------------------------------[ war ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ helloworld --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory F:\idea\0219\helloworld\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ helloworld --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ helloworld --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory F:\idea\0219\helloworld\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ helloworld --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ helloworld --- [INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.zze.test1.DemoTest 2 [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.021 s - in com.zze.test1.DemoTest [INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] [INFO] --- maven-war-plugin:3.2.2:war (default-war) @ helloworld --- [INFO] Packaging webapp [INFO] Assembling webapp [helloworld] in [F:\idea\0219\helloworld\target\helloworld] [INFO] Processing war project [INFO] Copying webapp resources [F:\idea\0219\helloworld\src\main\webapp] [INFO] Webapp assembled in [43 msecs] [INFO] Building war: F:\idea\0219\helloworld\target\helloworld.war [INFO] [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ helloworld --- [INFO] Installing F:\idea\0219\helloworld\target\helloworld.war to E:\dev\workspace\maven\repository\com\zze\helloworld\1.0-SNAPSHOT\helloworld-1.0-SNAPSHOT.war [INFO] Installing F:\idea\0219\helloworld\pom.xml to E:\dev\workspace\maven\repository\com\zze\helloworld\1.0-SNAPSHOT\helloworld-1.0-SNAPSHOT.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.544 s [INFO] Finished at: 2019-02-21T15:44:21+08:00 [INFO] ------------------------------------------------------------------------
compile 是默认的范围;若是没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在全部的 classpath 中可用,同时它们也会被打包。app
provided 依赖只有在当 JDK 或者一个容器已提供该依赖以后才使用。例如, 若是你开发了一个 web 应用,你可能在编译 classpath 中须要可用的 Servlet API 来编译一个 Servlet,可是你不会想要在打包好的 war 中包含这个 Servlet API;这个 Servlet API JAR 由你的应用服务器或者 Servlet 容器提供。已提供范围的依赖在编译 classpath (不是运行时)可用。它们不是传递性的,也不会被打包。webapp
runtime 依赖在运行和测试系统的时候须要,但在编译的时候不须要。好比,你可能在编译的时候只须要 JDBC API JAR,而只有在运行的时候才须要 JDBC 驱动实现。
test 范围依赖在通常的编译和运行时都不须要,它们只有在测试编译和测试运行阶段可用。
system 范围依赖与 provided 相似,可是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么作是为了容许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。若是你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(你应该一直尽可能去从公共或定制的 Maven 仓库中引用依赖)。
参考工程的继承与聚合,它其实就是使用依赖的传递来实现的。
建立工程,引入 'struts2-core' 依赖:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.37</version> </dependency> </dependencies> </project>
假如咱们不想使用传递进来的 'javassist',那么咱们能够经过配置将其排除:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.37</version> <exclusions> <exclusion> <groupId>javassist</groupId> <artifactId>javassist</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project>
建立工程,引入'struts2-spring-plugin' 依赖:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.37</version> </dependency> </dependencies> </project>
接着引入 'spring-beans' 的依赖:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.37</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.4.RELEASE</version> </dependency> </dependencies> </project>
此时会发现 'spring-beans' 的版本为下面直接声明的版本,由于它是直接引入,相对传进进来路径更近。
建立工程,引入 'struts2-spring-plugin' 依赖:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.37</version> </dependency> </dependencies> </project>
接着引入 'spring-context' 依赖:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.37</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.4.RELEASE</version> </dependency> </dependencies> </project>
此时会发现 'spring-beans' 的版本依旧是 'struts2-spring-plugin' 传递进来的,由于 'struts2-spring-plugin' 是先声明的。
交换 'struts2-spring-plugin' 和 'spring-context' 依赖的声明顺序:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.37</version> </dependency> </dependencies> </project>
此时 'spring-beans' 的版本就改成 'spring-context' 传递进来的版本了,由于 'spring-context' 是先声明的。
版本锁定通常在父子工程间使用,建立父工程 A,锁定 'spring-beans' 的版本:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>../B</module> </modules> <dependencyManagement> <!--dependencyManagement 下的 dependencies 节只是用来预先锁定指定依赖的版本,并不会真的引入依赖--> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.4.RELEASE</version> </dependency> </dependencies> </dependencyManagement> </project>
建立子工程 B ,继承父工程 A,引入 'spring-beans' 依赖:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <parent> <artifactId>A</artifactId> <groupId>com.zze</groupId> <version>1.0-SNAPSHOT</version> <relativePath>../A/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>B</artifactId> <dependencies> <!--由于在父工程中已经锁定了 spring-beans 的版本,因此在子工程中不用指定版本--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> </dependencies> </project>
由于在父工程中已经锁定了 'spring-beans' 的版本,因此在子工程中不指定版本会默认引用父工程锁定的版本。
建立工程,建立版本常量,在依赖中引用版本常量:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <properties> <!--建立版本常量--> <spring.version>4.2.4.RELEASE</spring.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <!--引用版本常量--> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> </dependencies> </dependencyManagement> </project>
建立一个父工程 A,再建立一个子工程 B 继承 A:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>../B</module> </modules> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.37</version> </dependency> </dependencies> </project>
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <parent> <artifactId>A</artifactId> <groupId>com.zze</groupId> <version>1.0-SNAPSHOT</version> <relativePath>../A/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <packaging>jar</packaging> <artifactId>B</artifactId> </project>
A 的 依赖会传递给B,此时就能够直接在子工程 B 中使用父工程 A 依赖了,这就是工程的继承。
建立工程 A,再建立工程 B 依赖工程 A:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.37</version> </dependency> </dependencies> </project>
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zze</groupId> <artifactId>B</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.zze</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
此时 A 的依赖会传递给 B ,在工程 B 就能够直接使用工程 A 引入的依赖了,这就是工程的聚合。
一、快捷键 CTRL+ALT+S 打开 IDEA 设置,配置 Maven 地址:
二、在 Importing 页中勾选如图项:
三、配置 Runner 页中属性 '-DarchetypeCatalog=internal',防止未联网状况不能建立 Maven 工程。
一、新建项目,选中 Maven,直接 Next:
二、输入坐标,再次 Next:
三、直接 Finish:
四、建立完成,编写代码测试:
一、新建项目,选中 Maven,如图选择 web 工程骨架,Next:
二、选择本身配置的 Maven 目录,Next:
三、直接 Finish:
四、输出如图则建立成功:
下面以运行一个 HelloWorld 程序为例:
一、新建 web 项目,在 'src/main' 下 java 建立文件夹,并标记其为 Sources Root 文件夹,执行完这个操做后 java 文件夹就至关于普通工程的 classpath 根目录了。
二、在 pom 文件中引入 Servlet 开发依赖 jar:
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency>
注意:由于 maven web 工程后续运行时使用 maven 提供的 tomcat 环境,这里要设置引入 jar 的 scope 为 provided,不然会由于 jar 包重复出异常。
三、在 'src\main\java' 下建立 Servlet 以下:
package com.zze.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("Hello world!!!"); } }
<servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.zze.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
一、打开 MavenProjects 窗口:
二、点击如图按钮:
三、输入 'tomcat:run' 指令,Execute:
四、此时项目就以被部署到 tomcat 并运行:
五、访问 'localhost:8080/helloworld/hello' 测试:
一、进入 Edit Configurations:
二、选择 Maven:
三、输入以下,Apply:
四、此时就可直接点击该图标启动项目了:
五、还可在 Maven Projects 窗口中双击该配置启动:
一、进入 Edit Configurations:
二、选择 Tomcat 下的 Local 项:
三、选择 Deployment 栏,点击 + 号:
三、选择 Artifact:
四、选择 war exploded 结尾项:
五、OK,接下来就能够像运行普通 web 工程同样启动 maven 项目:
在 "conf/settings.xml" 文件中的 mirrors 节下选下面一个节点添加便可:
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
<mirror> <id>jboss-public-repository-group</id> <mirrorOf>central</mirrorOf> <name>JBoss Public Repository Group</name> <url>http://repository.jboss.org/nexus/content/groups/public</url> </mirror>
<!--使用 tomcat7:run--> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin>
下面是我习惯使用的骨架:
建立普通 java 工程:不使用骨架;
建立父工程:maven-archetype-site-simple;
建立 web 工程:maven-archetype-webapp;