新建maven项目:
maven 坐标:
Group Id:项目的名称,项目名称以域名的倒序,比如:cn.itcast.mavendemo
Artifact Id:模块名称(子项目名称)
Version:模块的版本,snapshot(快照版,没有正式发行)、release(正式发行版本)
packaging的方式(打包方式):
jar:普通的java工程,运行在控制台上的(默认);
war:web工程;
pom:聚合工程
点击项目右键 -> Run As -> Maven..... 注意: 2 Maven build (无三点) :显示历史记录 3 Maven build... (有三点) : 在Goals那里输入命令 compile 命令:重新编译Java文件,于是target文件夹下面就重新过一份.class文件了(编译源代码)(控制台后面有会说的,生成class文件) clean:与compile刚刚相反,清掉target下面的.class文件,以及也会把jar包或者war包清掉 package: 打成一个jar或者war包(当然,如果没有.class文件,会自动编译,也就是执行complile)(可以看到target目录下有jar包或者war包或者什么包生成) install:把生成的jarwar包放在maven项目的坐标目录(那个什么什么目录 groudid artifacateid)下面(控制台后面有会说的,生成jarwar包文件)
通过在maven上面配置Tomcat,用命令(tomcat7:run)来启动 :
<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.xiaofeng.www</groupId> <artifactId>mavenWeb</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <!-- maven的编译插件 --> <configuration> <source>1.7</source> <!-- 指定jdk版本 --> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <!-- 在Maven上面配置tomcat,不用再部署 --> <version>2.2</version> <configuration> <port>8080</port> <!-- 路径: -http://localhost:8080/mavenWeb/ --> <path>/mavenWeb</path> </configuration> </plugin> </plugins> </build> <dependencies> <!-- servlet一定要配置,scope标签一定要 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> </dependencies> </project>
聚合与继承:
先建父类,记得是建一个maven project,
再建子类:
可以留意到目录结构:
这就是聚合:把AB两个子项目聚合在一起
这就是继承:AB两个项目都可以用parent的jar包了
注意:聚合以及继承常常一起用,但是并没有完全等同。比如:A工程也可以不继承parent的jar包,但是也可以聚合在parent下面
依赖范围和依赖传递:
1、compile 编译、测试、运行,A在编译时依赖B,并且在测试和运行时也依赖。 strus-core、spring-beans 打到war包或jar包。 2、provided 编译、和测试有效,A在编译和测试时需要B。 比如:servlet-api就是编译和测试有用,在运行时不用(tomcat容器已提供)。 不会打到war。 3、runtime:测试、运行有效。 比如:jdbc驱动包 ,在开发代码中针对java的jdbc接口开发,编译不用。 在运行和测试时需要通过jdbc驱动包(mysql驱动)连接数据库,需要的!! 会打到war。 4、test:只是测试有效,只在单元测试类中用。 比如:junit 不会打到war。
设置依赖范围:(如果是compile就不需要设置了,因为compile是scope的默认值。重新执行打包为war , 会发现servlet-api.jar已经不存在。)
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> <scope>runtime</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>
什么是依赖传递,大概知道这个概念就可以了,下面这个图我也看不懂
标签:
properties:统一管理版本号
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <erui.version>1.2.0-SNAPSHOT</erui.version> <mysql.version>5.1.34</mysql.version> </properties>
exclusions:排除依赖
<dependency> <groupId>com.sf</groupId> <artifactId>erui-common</artifactId> <version>${erui.version}</version> <exclusions> <exclusion> <artifactId>sflog-log4j</artifactId> <groupId>com.sf.sgs</groupId> </exclusion> </exclusions> </dependency>
dependencyManagement:相当于一个对所依赖jar包进行版本管理的管理器
1:如果dependencies里的dependency自己没有声明version元素,那么maven就会倒dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version 2:如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。 <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.7</version> </dependency> </dependencies> </dependencyManagement> //会实际下载jar包 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> </dependencies>
END