Java开发中常用是maven来管理jar包依赖、构建项目;
使用maven开发项目时可能需要处理的问题:修改镜像、升级依赖jar的版本、解决jar包冲突、多模块项目依赖的统一管理,构建项目等;
更多功能使用可查看maven官网;
windos安装和配置maven
这一步非必须,idea自带的maven插件也能开发项目;
-
官网下载zip包: https://maven.apache.org/download.cgi 如apache-maven-3.9.2-bin.zip
-
下载之后解压到非中文、没有空格的目录;
-
可在conf/settings.xml文件中修改默认本地仓库:
如<localRepository>D:\mavenRepo</localRepository>
-
修改使用阿里云的镜像仓库(也可能用公司提供的镜像仓库):
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
-
配置系统变量MAVEN_HOME(值是maven安装目录)、环境变量PATH中加入 %MAVEN_HOME%\bin;
-
通过 mvn -v 验证;
构建的各个环节
-
清理clean:将以前编译得到的旧文件class字节码文件删除
-
编译compile:将java源程序编译成class字节码文件
-
测试test:自动测试,自动调用junit程序
-
报告site: 用标准格式记录和显示测试结果;
-
打包package:动态Web工程打War包,java工程打jar包
-
安装install:Maven特定的概念-----将打包得到的文件复制到“仓库”中的指定位置
-
部署deploy:将动态Web工程生成的war包复制到Servlet容器下,使其可以运行 作者:
实际使用中,用的最多就是:mvn clean package ;
有时候看到 package -f pom.xml ,这是指定哪一个pom.xml,一般一个服务模块就一个pom,所以平时无需指定;
jar 包管理
(1)一般引入依赖:
<!-- SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
(2)多模块项目,注意统一依赖版本;
(3)移除jar中的某项子依赖:使用 exclusions;
(4)pom中打包配置有三种方式:pom、jar、war
pom是多模块项目中的父工程使用,jar打包后可用于发布或依赖,war是打包后发布的;
<packaging>war</packaging>
(5)scope 取值范围:
scope有以下6个取值:
-
compile: 编译范围,缺省值,适用于所有阶段,项目测试、打包发布期间都有效
-
provided: 已提供范围,该依赖包已经由目标容器(如tomcat)和JDK提供,只在编译环境下有效,打包时不会加入,如servlet-api和jsp-api等jar
-
test: 测试范围,只在测试环境下使用,用于编译和运行测试代码,项目打包时不会加入,如junit
-
runtime: 运行范围,运行和测试环境使用,编译时不用加入classpath,打包时候会加入
-
system: 系统范围,与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分
-
import: import 依赖范围使用要求,打包类型必须是 pom,必须放在 dependencyManagement 中
(6)pom中配置插件:
如screw 数据库文档生成工具插件:
<build>
<plugins>
<plugin>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-maven-plugin</artifactId>
<version>${lastVersion}</version>
<dependencies>
<!-- HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
</dependency>
<!--mysql driver-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
</dependencies>
<configuration>
<!--username-->
<username>****</username>
<!--password-->
<password>****</password>
<!--driver-->
<driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
<!--jdbc url-->
<jdbcUrl>jdbc:mysql://127.0.0.1:3306/****</jdbcUrl>
<!--生成文件类型 文件类型:WORD为doc文档,MD为Markdown文档,HTML则为HTML的网页格式-->
<fileType>HTML</fileType>
<!--打开文件输出目录-->
<openOutputDir>false</openOutputDir>
<!--生成模板-->
<produceType>freemarker</produceType>
<!--文档名称 为空时:将采用[数据库名称-描述-版本号]作为文档名称-->
<fileName>测试文档名称</fileName>
<!--描述-->
<description>数据库文档生成</description>
<!--版本-->
<version>${project.version}</version>
<!--标题-->
<title>数据库文档</title>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
(7) 在哪里搜索要使用的jar包呢?
(8) IDEA 的 Maven Helper 插件,方便查看处理依赖冲突;
(9) IDEA 中修改maven配置,Setting->Build…->Build Tools->maven:
菜鸟教程:https://www.runoob.com/maven/maven-tutorial.html
maven官方文档:https://maven.apache.org/index.html
多模块的项目,要配置为父子工程模式,模块之间不要循环依赖;
关于打包方式,父工程用pom,非发布模块如common用jar,用于发布服务的模块用war,springboot可用jar