网站开发行业,wordpress改变默认后台登录地址,微信怎么开公众号,无备案网站加速文章目录 Maven安装MavenMaven的工作流程配置MavenMaven的使用module和project的关系如何用Maven导包 如何用Maven进行项目构建指令介绍clean指令compile指令package指令install指令 Maven的依赖管理如何导包scope作用域依赖传递依赖冲突 使用Maven开发项目Junit如何使用Junit … 文章目录 Maven安装MavenMaven的工作流程配置MavenMaven的使用module和project的关系如何用Maven导包 如何用Maven进行项目构建指令介绍clean指令compile指令package指令install指令 Maven的依赖管理如何导包scope作用域依赖传递依赖冲突 使用Maven开发项目Junit如何使用Junit Maven
Maven是一个项目管理工具主要有两个功能 项目构建 指可以帮助我们编译项目、打包项目可以帮助我们把自己的项目打包成一个.jar文件、安装项目、部署项目 依赖管理 当我们的项目变得复杂之后项目中的依赖越来越多管理起来也越来越复杂Maven可以帮助我们去管理这些依赖。 安装Maven
版本说明
JDK1.8Mavenhttps://maven.apache.org/download.cgi不要下最新版本
解压
证明安装成功
配置环境变量
打开高级系统设置配置系统变量 配置环境变量 最后在cmd中输入mvn -v查看当前版本 Maven的工作流程
传统写代码的问题
jar包反复存储占用空间手动管理容易混乱
Maven的工作流程图 本地仓库其实就是本地存放Jar包的一个路径统一的集中式的去管理本地的所有jar包中央仓库中央仓库其实就是Maven 提供的一个仓库里面收录了世界上所有的开源的jar包但是在国外网速慢。镜像仓库阿里等公司会去定期同步中央仓库把中央仓库的内容同步过来。这样我们后续在下载jar包的时候就可以让他指定去镜像仓库下载这样下载的速度就会比较快。 配置Maven
配置settings.xml 在conf文件里配置本地仓库的路径 配置镜像仓库 配置JDK的编译版本
源码
settings...mirrorsmirroridnexus-aliyun/idmirrorOfcentral/mirrorOfnameNexus aliyun/nameurlhttp://maven.aliyun.com/nexus/content/groups/public/url/mirror/mirrors.../settings-------------------------------------------------------------------------------------settings...profilesprofileidjdk-1.8/idactivationactiveByDefaulttrue/activeByDefaultjdk1.8/jdk/activationpropertiesmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.targetmaven.compiler.compilerVersion1.8/maven.compiler.compilerVersion/properties/profile/profiles...
/settings配置idea 在Settings中搜索Maven Other Settings — Settings for New Projects — Maven Maven的使用
Maven工程的要求 在项目的根路径下有一个pom.xml文件 工程目录是如下的结构 ProjectName srcsrc里面不直接写包 main java写代码的地方指源代码的路径resources配置文件地方指配置文件的路径 test java单元测试代码指测试类的存放路径resources单元测试的配置文件指测试类需要用到的文件 pom.xml在项目的根目录下
eg 怎么把一个项目转换成maven项目
在src里面建几个包 src/main/java mark as sources src/main/resources mark as resources src/test/javasrc/test/resources 创建一个pom.xml对着pom.xml点击add as maven project
怎么通过idea创建一个Maven项目 GroupId指公司名、组织名 egcom.coo1heisenberg ArtifactId项目名 egtest_maven
module和project的关系 project 一个项目是IDEA开发工作的顶级组织单位。在其完成的形式中一个项目可能代表一个完整的软件解决方案 项目是以下内容的集合 工作成果源代码、脚本、配置文件、文档、包等。用于开发、编译、运行和测试代码的SDK和库。在项目上下文中表示你的工作偏好设置 一个项目有一个或者多个模块作为其部件 module 模块是项目的一部分你可以独立的编译、运行、测试和调试。模块是一种在维护公共项目配置的同事降低大型项目复杂性的方法。模块可以重复使用如果需要可以再多个项目中包含一个模块。
如何用Maven导包
打开https://mvnrepository.com/。搜索要用的包找到指定的版本拷贝坐标 groupId、artifactId、version 叫做坐标可以唯一确定一个包 只需要在 pom.xml文件中声明jar包的坐标就可以了添加了之后点击 import changes
eg 如何用Maven进行项目构建
指令介绍
项目构建其实就是 Maven可以帮助我们去检查项目编译项目测试项目打包项目安装项目部署项目 clean指令
Maven指令的执行依赖于一些jar包
方式一通过cmd执行 方式二通过idea自带的命令行执行 得以管理员身份打开idea否则识别不出mvn命令 方式三直接使用maven的可视化插件常用
compile指令
compile是编译的意思可以帮助我们生成一个target文件夹以后只能在java文件夹中写代码在resources文件夹里面写配置文件 在src/main/java中的代码会编译到target/classes里面在src/main/java中的配置文件、其他文件不会进入到target/classes里面在src/main/resources中的代码会拷贝到target/classes里面 test文件是运行单元测试的只会运行test文件里面java的单元测试 先引入Maven中的JunitAssert.assertEquals()在单元测试里面使用Assert断言帮我们完成自动化的检验工作
!-- https://mvnrepository.com/artifact/junit/junit --
dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope
/dependencypackage指令
package可以帮助我们把项目打包
打包的名字artifactId-version.jar是artifactId加上文件的版本打包的格式 jar 默认的打包格式 war 需要指定指定的格式为
!-- 指定打包的格式默认为jar 可以配置为 war 和 pom --
packagingjar/packaginginstall指令
install命令可以帮助我们把package生成的jar包复制到本地仓库中需要掌握根据 groupId、artifactId 、version找本地的jar eg Maven的依赖管理
如何导包
按照上面说到的三步流程执行即可
scope作用域
每个依赖包都有自己作用范围 scopeXXX/scope eg test 仅仅在测试包src/test/java路径下有效在 src/main/java路径下失效。 provided 在编译的时候生效在运行的时候失效 runtime 在编译的时候失效在运行的时候生效最常见的是数据库的驱动包设计原因就是防止写代码的时候用了MySQL特有的类切数据库的时候不好操作 compile 默认的作用域在编译和运行的时候都生效
依赖传递
指依赖具有传递性eg引入了commons-dbcp而commons-dbcp又引入了commons-pool
依赖冲突
当在同一个项目中导入同一个依赖的不同的版本就会有冲突的问题。 如何解决依赖冲突 声明优先原则 是指这同一个项目的不同的版本的jar包声明优先仅仅指的是第二级后面的依赖谁先在pom.xml中声明以谁为准如果在pom.xml里同时依赖了两个版本。是以最后一个指定的为准 就近原则 在进行依赖传递的时候谁传递的次数比较少以谁为准就近原则的优先级高于声明优先原则 手动排除 手动去排除传递过来的依赖
eg
dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.22/version
/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.3.13/version
/dependency其中
spring-context依赖了spring-beans5.3.22 优先
spring-jdbc依赖了spring-beans5.3.13--------------------------------------------------dependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.3.13/version
/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.3.22/version
/dependency优先--------------------------------------------------dependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.3.4/version!-- 手动排除 --exclusionsexclusiongroupIdorg.springframework/groupIdartifactIdspring-beans/artifactId/exclusionexclusiongroupIdorg.springframework/groupIdartifactIdspring-core/artifactId/exclusion/exclusions/dependency
提取常量 这个是一个避免依赖冲突的方法。是后面工作中主要推荐的做法。常量名字不要随便取
eg properties!--1. 提取了常量之后可以避免依赖冲突的问题2. 提取了常量之后可以方便我们后期管理这些依赖查看版本更换版本--spring.version5.3.3/spring.versionmysql.version5.1.47/mysql.versiondruid.version1.2.6/druid.version/propertiesdependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion${spring.version}/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql.version}/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion${druid.version}/version/dependency/dependencies使用Maven开发项目 路径问题的建议
不要用绝对路径最好使用类加载器的方式去读文件
切换成Maven之后开发模式的变化
之前需要手动下jar包拷贝添加到库文件现在只用引入坐标之前读配置文件使用new FileInputStream()现在读配置文件需要用classLoader配置文件的位置需要在src/main/resource
eg 以连接池中的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);}
}
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.coo1heisenberg/groupIdartifactIdtest_maven/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdmodule1/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncodingdruid.version1.2.6/druid.version/propertiesdependencies!-- https://mvnrepository.com/artifact/com.alibaba/druid --dependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion${druid.version}/version/dependency!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.16/versionscoperuntime/scope/dependency/dependencies/projectdriverClassNamecom.mysql.jdbc.Driver
urljdbc:mysql://localhost:3306/test?
characterEncodingutf8useSSLfalseserverTimezoneUTC
usernameroot
password123456Junit
Junit是一个被广泛使用的测试工具可以帮助我们运行我们指定的方法
如何使用Junit
导包
dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version
/dependency使用 TestAfter 修饰的方法会在测试方法运行之后执行在每一次测试方法的前后都会运行一般用来准备数据 Before 修饰的方法会在测试方法运行之前执行在每一次测试方法的前后都会运行一般用来销毁数据 BeforeClassAfterClass 使用的注意事项 BeforeClass和AfterClass修饰的方法必须是静态的Test注解修饰的方法必须是public、必须是void、必须没有参数测试类必须在 src/test/java 路径下测试类的命名必须叫做 XxxTest测试方法Test注解修饰的方法的命名必须叫做 testXxx(); 使用断言语句来完成结果的确认
Test
public void test1() {// 在单元测试里面使用Assert 断言帮我们完成自动化的检验工作。Assert.assertEquals(new Integer(3), max);
}