目录
后面的内容将用到maven,为了方便以后的,我加入了maven的支持,maven相关的知识我也会简单讲一下,idea使用maven相对比较简单的。
一、关于maven
1.1 什么是maven
maven是Apache下的一个纯java开发的一个开源项目,它是一款能够抽象构建过程,并且提供依赖管理,中央仓库,自动下载构建等功能的项目构建工具。
1.2 为什么要使用maven工具构建项目?
假如我们在开发两个Java项目,暂时称之为A,B,这两个项目中对于一些特殊功能会有互相依赖的情况下,该如何做两者之间较好的关联呢?是打算在A,B两边共用一套代码进行关联吗?( 这样的做法会非常难以进行后期的维护 )
如果我们将共用的代码打包成jar引入项目中使用的话,那么后期进行代码更新的话是否又要对所有引入的jar进行更新呢?这样的做法似乎非常繁琐。
回想起以前做开发的时候,由于maven技术还没有出现,使用ssh框架进行开发的时候,所有的jar都需要人为的进行统一导入和维护,导致后期的维护难度极高。
而maven正是可以解决以上所说的这些问题。
1.3 maven会如何进行jar的管理呢?(了解)
在maven这款工具里面,有一个特别的概念叫做坐标。这个坐标可不是我们数学里面说的那个坐标,但是在设定上确实和数学的坐标有一点类似,就是每个坐标都会拥有属于它自己的唯一标志。在maven里面也不例外:
拿我们之前在XML讲的c3p0为例子,在maven提示就是:
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
例如上边的这段坐标信息,groupId 通常会用于标志该jar所属的实际项目,由于通常一个项目可能会划分为了多个模块,因此artifactId 则是对于该项目的某个模块进行了一个明确的标志。version元素更多的是定义了该构件的真实版本。通常我们会称呼这一段 dependency 为依赖。
对于依赖的读取还有一个叫做scope的配置
scope的分类 | 讲解 |
compile | 默认情况下就是compile类型 意味着该依赖既要参与编译又要参与后期的测试等环节 |
test | 表示该依赖仅仅参加和测试有关的工作 |
provided | 可以参与编译,测试,运行等周期, 但是在打包的时候会进行exclude的相应操作, |
runntime | 在编译环节不会参与进来,个人感觉和compile差异不大 |
system | 通常是指不从仓库读取依赖,而是通过本地路径来读取依赖, 因此常与systemPath标签结合使用 |
当然如果对于每个依赖我们都进行相应单独的version设置,那么管理起来会有些繁琐,因此可以使用或者标签进行统一的管理,例如下方的这两组案例:
基于parent的依赖管理:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
基于properties的依赖管理,在properties里面我们可以进行整个项目的统一字符集编码管理或者对于一些依赖jar包统一版本号的管理:
<properties>
<activemq.version>5.15.9</activemq.version>
<antlr2.version>2.7.7</antlr2.version>
<appengine-sdk.version>1.9.76</appengine-sdk.version>
<artemis.version>2.6.4</artemis.version>
<aspectj.version>1.9.4</aspectj.version>
<assertj.version>3.11.1</assertj.version>
<atomikos.version>4.0.6</atomikos.version>
<bitronix.version>2.1.4</bitronix.version>
<build-helper-maven-plugin.version>3.0.0</build-helper-maven-plugin.version>
<byte-buddy.version>1.9.16</byte-buddy.version>
1.4 总结
说了半天就是说maven就一个项目构建工具,用它统一管理好依赖关系、自动下载相关jar、构建项目等,这样就是省事不少,让开发花更多的精力去写代码。
1.5 maven仓库
简单来说就是存储jar包的地方,像一个大仓库那样,但它比jar包更强大,把依赖关系都帮你理好了。有了仓库就很方便了,需要有什么软件就去maven仓库查找,官方线上的maven仓库地址为:https://mvnrepository.com/,打开它要什么软件你搜索就行了。是不是很方便^_^
二、建立一个新项目并添加maven支持
1.1 建立普通的spring项目
为了不影响前面的项目我建立一个新项目叫 spring-annotation2 ,如果不懂得怎么建立spring项目的,可以参见我的《hualinux spring 4.3:idea 2020创建简单的spring注解式(手把手教版)》
1.2 maven安装
网上关于一堆maven的安装,idea的强大就是自带maven!不需要你安装,如果你的idea版本保持是新版本的话,绝大部分已经够用了,除非的人特别指定要用最新版本的maven
1.3 普通spring项目加入maven支持
为了对方我先给出普通spring项目的界面
现在添加maven支持,操作如下:
结果如下:
先从左边讲起
1.目录:自动帮你生成相关目录,方便你管理
main:开发的程序放在这里,
java目录:放java源代码
resources:放配置文件,如xml、yml
test:主要放测试相关
java目录:测试用的java代码,如你使用junit单元测试
pom.xml:maven的配置文件
到右侧,生成多了一个maven窗口,并打开展开了,其中最重要的是Lifecycle生命周期,下面对功能进行解说,如果要运行某个功能直接双击即可:
名字 | 说明 | 备注 |
clean | 就是清除编译好的包 | idea在写项目的时候添加了一些依赖不生效 是因为有缓存所以要clean一下 |
validate | 验证工程是否正确,所需的信息是否完整 | |
compile | 编译源代码 | |
test | 执行单元测试 | |
package | 将工程文件打包为指定的格式,例如JAR,WAR等 | |
verify | 检查package是否有效、符合标准 | |
install | 将包安装至本地仓库,以让其它项目依赖。 | |
site | 生成项目的站点文档 | |
deploy | 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。 |
上面蓝色使用的频率相对比较多。
PS:上面这些功能我们一般不用,初学者最多就用一下clean清除一下,idea啊都很好中的缓存,编译好的包,还有package打成包,其它基本不用。
初学者只需要学会使用maven配置文件方式添加jar包即可,就是下面所讲的。
三、在idea使用maven
在idea使用maven很简单的事,只需要学会两个就行了
3.1 包查找和安装
包的查找直接去maven官网即可,要什么就搜索什么就好了
比如用用到c3p0,我直接搜索c3p0
上面的那段配置文件需要用到,先复制一下
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
3.2 添加maven配置文件
3.2.1 填写groupId
spring添加maven支持需要配置一下groupId,groupId就相当于组的概念,一般是写公司名,域名等,比如我的就是com.hualinux,其它idea帮你填写好了,不需要你弄
<groupId>com.hualinux</groupId>
<artifactId>spring-annotation2</artifactId>
<version>1.0-SNAPSHOT</version>
artifactId就相当于组中的一个名字,一般是项目名,一般不会相同,如果相同还有版本号应该是不同的,表示同一个项目不同的版本号。
groupID:定义了项目属于哪个组,举个例子,如果你的公司是mycompany,有一个项目为myAPP,那么groupID就应该是com.mycompany.myAPP
artifactID:定义了当前maven项目在组中的唯一ID,比如:myapp-web等
version:指定了myAPP项目的当前版本,SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。
name:有的还有一个name标签,声明了一个对于用户更为友好的项目名称,不是必须的,推荐为每个pom声明name,以方便信息交流。
3.2.2 指定java版本
配置了groupId之后,如果不需要添加下载的jar配置,理论上就可以像普通的spring项目一样使用了。
但是会有一个问题maven默认jdk版本为1.5,可以打开spring-annotation2.iml文件看一下
而我当前的jdk版本为14.0.1,这样会有什么问题呢,可以建立一年建立的java看一下
发现报错了,因为spring-annotation2.iml中,LANGUAGE_LEVEL="JDK_1_5"导致的
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5">
我看一下idea默认等级是多少
我使用的是14级,jdk用的是14.0.1,所得还要做一步工作就是指定java版本
处理方法一、设置Modules和java compiler(不推荐发现关闭失效)
在Modules中设置和上面一致的14(如果你们的是8或11则设置回对应的)
在setting设置回14
再次运行,正常了
再回看spring-annotation2.iml中LANGUAGE_LEVEL变化
ps:这个方法有一个缺点,就是idea一关闭再次打开就失效了,这是因为idea读取maven发现没有配置java版本,所以设置回默认的1.5版本了,要用下面方法二才能彻底解决。
方法二、直接在maven中指定(推荐)
如果按方法一,关闭再打开发现修改没有生效,那么就按方法这个方法
直接在maven中使用文件指定,在最后添加
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>14.0.1</source>
<target>14.0.1</target>
</configuration>
</plugin>
</plugins>
</build>
添加上面配置之后,idea读到就会自动修改上面两处
3.2.3 添加maven文件配置
刚才maven官网找到的c3p0的maven配置文件,直接配置在 <dependencies> </dependencies>标签中间即可
<dependencies>
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
</dependencies>
</project>
所有的maven下载配置规定都放在 <dependencies> </dependencies>标签中间,比如c3p0还需要 mchange-commons-java
这样整个pom.xml变成了
<?xml version="1.0" encoding="UTF-8"?>
<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.hualinux</groupId>
<artifactId>spring-annotation2</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.20</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>14.0.1</source>
<target>14.0.1</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
添加完上面配置,怎么让它自动下载呢,看pom.xml配置界面会有一个小长方块出来,点一下,如下图所示:
点一下面上那个蓝色小箭头圆圈,发现idea最下方自动去线上maven仓库查找并下载了,红色等下变白色了,
是不是以后安装软件都不用下载啦,直接添加配置文件即可。
附录一、查看idea maven的配置
打开setting