.jar文件)、安装项目、部署项目版本说明:
1.8解压:

配置环境变量:


传统写代码的问题:
jar包反复存储,占用空间Maven的工作流程图:

conf文件里


源码:
<settings>
...
<mirrors>
<mirror>
<id>nexus-aliyunid>
<mirrorOf>centralmirrorOf>
<name>Nexus aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
mirror>
mirrors>
...
settings>
-------------------------------------------------------------------------------------
<settings>
...
<profiles>
<profile>
<id>jdk-1.8id>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>1.8jdk>
activation>
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
properties>
profile>
profiles>
...
settings>


Maven工程的要求:
在项目的根路径下,有一个pom.xml文件
工程目录是如下的结构:
ProjectName
pom.xml(在项目的根目录下)
eg:

怎么把一个项目转换成maven项目:
src里面建几个包
src/main/java
src/main/resources
src/test/javasrc/test/resourcespom.xmlpom.xml点击add as maven project怎么通过idea创建一个Maven项目:

com.coo1heisenbergtest_mavenproject
一个项目是IDEA开发工作的顶级组织单位。在其完成的形式中,一个项目可能代表一个完整的软件解决方案
项目是以下内容的集合:
module
groupId、artifactId、version 叫做坐标,可以唯一确定一个包pom.xml文件中声明jar包的坐标就可以了,添加了之后点击 import changes eg:

项目构建其实就是 Maven可以帮助我们去检查项目,编译项目,测试项目,打包项目,安装项目,部署项目

Maven指令的执行依赖于一些jar包
cmd执行
mvn命令

target文件夹src/main/java中的代码,会编译到target/classes里面src/main/java中的配置文件、其他文件,不会进入到target/classes里面src/main/resources中的代码,会拷贝到target/classes里面test文件是运行单元测试的,只会运行test文件里面java的单元测试
Maven中的JunitAssert.assertEquals():在单元测试里面,使用Assert断言帮我们完成自动化的检验工作
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
package可以帮助我们把项目打包
artifactId-version.jar(是artifactId加上文件的版本)jar
war
<packaging>jarpackaging>
groupId、artifactId 、version找本地的jar
按照上面说到的三步流程执行即可
每个依赖包都有自己作用范围
eg:

src/test/java)路径下有效,在 src/main/java路径下失效。commons-dbcp,而commons-dbcp又引入了commons-pool 

pom.xml中声明,以谁为准pom.xml里,同时依赖了两个版本。是以最后一个指定的为准eg:
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.3.22version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.3.13version>
dependency>
其中:
spring-context依赖了spring-beans(5.3.22) 优先!!!
spring-jdbc依赖了spring-beans(5.3.13)
--------------------------------------------------
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.3.13version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.3.22version>
dependency>(优先!!!)
--------------------------------------------------
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>5.3.4version>
<exclusions>
<exclusion>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
exclusion>
<exclusion>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
exclusion>
exclusions>
dependency>
eg:
<properties>
<spring.version>5.3.3spring.version>
<mysql.version>5.1.47mysql.version>
<druid.version>1.2.6druid.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>${mysql.version}version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>${druid.version}version>
dependency>
dependencies>
路径问题的建议:
切换成Maven之后,开发模式的变化:
jar包,拷贝,添加到库文件;现在只用引入坐标new FileInputStream();现在读配置文件,需要用classLoader,配置文件的位置需要在src/main/resourceeg:
以连接池中的druid举例:
public class druidDemo {
public static void main(String[] args) throws Exception {
testNormal();
}
private static void testNormal() throws Exception {
Properties properties = new Properties();
// 1. 绝对路径不要使用
// properties.load(new FileInputStream("druid.properties"));
ClassLoader classLoader = druidDemo.class.getClassLoader();
// 现在配置文件 需要用classLoader拿
// 通过类加载器拿文件,会通过target/classes里面拿
URL resource = classLoader.getResource("druid.properties");
properties.load(new FileInputStream(resource.getPath()));
// 或者
// properties.load(classLoader.getResourceAsStream("druid.properties"));
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement();
boolean execute = statement.execute("insert into t_staff(name) values ('zs')");
System.out.println(execute);
}
}
<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>
<parent>
<groupId>com.coo1heisenberggroupId>
<artifactId>test_mavenartifactId>
<version>1.0-SNAPSHOTversion>
parent>
<artifactId>module1artifactId>
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<druid.version>1.2.6druid.version>
properties>
<dependencies>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>${druid.version}version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.16version>
<scope>runtimescope>
dependency>
dependencies>
project>
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?
characterEncoding=utf8&useSSL=false&serverTimezone=UTC
username=root
password=123456
Junit是一个被广泛使用的测试工具,可以帮助我们运行我们指定的方法
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
dependency>
使用
@Test@After
@Before
@BeforeClass@AfterClass使用的注意事项:
@BeforeClass和@AfterClass修饰的方法必须是静态的@Test注解修饰的方法必须是public、必须是void、必须没有参数src/test/java 路径下XxxTest testXxx();使用断言语句,来完成结果的确认
@Test
public void test1() {
// 在单元测试里面,使用Assert 断言帮我们完成自动化的检验工作。
Assert.assertEquals(new Integer(3), max);
}