Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
下载官网:http://maven.apache.org/download.cgi
解压:要求目录不要过深、不要有中文和特殊符号
必须配置JAVA_HOME环境变量
配置环境变量
本地仓位置(下载的jar包放置的位置):在解压路径的conf中的settings.xml,并配置阿里云镜像。
在标签中的最后添加本地仓的设置
<settings>
<localRepository>D:\mavenjarlocalRepository>
settings>
在标签中配置镜像
<mirror>
<id>nexus-aliyunid>
<mirrorOf>centralmirrorOf>
<name>Nexus aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
mirror>
目录结构(手动新建)
project
src
——main
————java
————resources
——test
————java
————resources
pom.xml
目录表示
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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.etimegroupId>
<artifactId>mavenartifactId>
<version>1.0-SNAPSHOTversion>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
dependencies>
project>
在src/mian/java/com/etime/maven路径下创建Demo1.java
package com.etime.maven;
public class Demo1{
public String sayHello(String name){
return "Hello "+name+"!";
}
}
在src/test/java/com/etime/maven路径下创建创建TestDemo1.java
package com.etime.maven;
import org.junit.Test;
public class TestDemo1{
@Test
public void t01(){
Demo1 d = new Demo1();
String res = d.sayHello("World!");
System.out.println(res);
}
在控制台中进入pom.xml文件所在目录
执行 mvn compile命令
cmd 中继续录入mvn clean命令
再次录入 mvn compile命令
cmd 中录入 mvn test-compile命令,
cmd 中录入 mvn test命令,查看target目录变化
cmd 中录入 mvn package命令,查看target目录变化(将项目打包)
![在这里插入图片描述](https://img-blog.csdnimg.cn/8b14e6f7534d4189b12424e71e6ac99c.png#pic_center)
- target目录变化
![在这里插入图片描述](https://img-blog.csdnimg.cn/c51a4e1f7e7e4c6d8587a77529c7fe7e.png#pic_center)
(1) POM:Project Object Model,项目对象模型。
(2) 将Java工程的相关信息封装为对象作为便于操作和管理的模型。
(3) Maven工程的核心配置。
(4) 可以说学习Maven就是学习pom.xml文件中的配置。
(1) maven的坐标
(2) 举例
<groupId>com.etimegroupId>
<artifactId>mavenartifactId>
<version>1.0-SNAPSHOTversion>
(3) jar包的网站
(4) 通过坐标找到执行的jar包
项目结结构
day02
src
——main
————java
————resources
——test
————java
————resources
pom.xml
在新建项目的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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.etimegroupId>
<artifactId>demoartifactId>
<version>1.0-SNAPSHOTversion>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>com.etimegroupId>
<artifactId>mavenartifactId>
<version>1.0-SNAPSHOTversion>
dependency>
dependencies>
project>
在新建项目的src/main/java/com/etime/maven2中新建Demo02.java文件
package com.etime.maven1;
import com.etime.maven.Demo1;
public class Demo2{
public String say(String name){
Demo1 d = new Demo1();
String res = d.sayHello(name)+" I am mary";
return res;
}
}
在新建项目的src/test/java/com/etime/maven2中新建TestDemo02.java文件
package com.etime.maven1;
import org.junit.Test;
public class TestDemo2{
@Test
public void t01(){
Demo2 d = new Demo2();
String res = d.say("jack");
System.out.println(res);
}
}
进入day02项目中pom.xml所在的位置,打开命令窗口分别执行 mvn compile、mvn test-compile、mvn test
问题
当A jar包需要用到B jar包中的类时,我们就说A对B有依赖。例如:commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar。
通过第二个Maven工程我们已经看到,当前工程会到本地仓库中根据坐标查找它所依赖的jar包。
配置的基本形式是使用dependency标签指定目标jar包的坐标。
<dependencies>
<dependency>
<!—坐标 -->
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
dependencies>
依赖的范围
Environment工程:
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.1.1version>
dependency>
当前工程:
<dependency>
<groupId>com.etime.mavengroupId>
<artifactId>EnvironmentartifactId>
<version>0.0.1-SNAPSHOTversion>
<exclusions>
<exclusion>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.1.2version>
dependency>
以对Spring的jar包依赖为例:
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>4.0.0.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>4.0.0.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>4.0.0.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-ormartifactId>
<version>4.0.0.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>4.0.0.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>4.0.0.RELEASEversion>
dependency>
问题是如果我们想要将这些jar包的版本统一升级为4.1.1,是不是要手动一个个修改呢?显然,我们有统一配置的方式:
<properties>
<spring.version>4.1.1.RELEASEspring.version>
properties>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-ormartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
创建父工程
创建子模块
创建父工程和创建一般的Java工程操作一致,唯一需要注意的是:打包方式处要设置为pom。
在子模块中引用父工程
<parent>
<groupId>...groupId>
<artifactId>...artifactId>
<version>...version>
<relativePath>从当前目录到父项目的pom.xml文件的相对路径relativePath>
parent>
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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
properties>
<packaging>warpackaging>
<groupId>com.etimegroupId>
<artifactId>day02artifactId>
<version>1.0-SNAPSHOTversion>
<dependencies>
<dependency>
<groupId>commons-dbutilsgroupId>
<artifactId>commons-dbutilsartifactId>
<version>1.6version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.6version>
dependency>
<dependency>
<groupId>com.mchangegroupId>
<artifactId>c3p0artifactId>
<version>0.9.5version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
dependencies>
project>
Demo.java
package com.etime.demo;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;
import java.sql.SQLException;
public class StudentDemo {
@Test
public void t01() {
//删除学号为1的学生
QueryRunner queryRunner = new QueryRunner(C3P0Util.getDataSource());
String sql = "delete from student where sid=2";
try {
int rows = queryRunner.update(sql);
System.out.println(rows);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
注意:c3p0的配置文件需要放到test中的resources文件夹中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OiYbFKb0-1692059360442)(F:\Java语言\课程笔记\第六阶段\myself\maven\img\testc3p0.png)]
.demo;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;
import java.sql.SQLException;
public class StudentDemo {
@Test
public void t01() {
//删除学号为1的学生
QueryRunner queryRunner = new QueryRunner(C3P0Util.getDataSource());
String sql = “delete from student where sid=2”;
try {
int rows = queryRunner.update(sql);
System.out.println(rows);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
- 注意:c3p0的配置文件需要放到test中的resources文件夹中