idea集成maven插件
settings-->输入maven-->选择本地maven安装路径,配置文件以及本地仓库的路径:
创建非web的maven工程
创建工程-->选择maven,下一步之后填写项目的坐标(类似于全类名),下一步之后再次确认:
创建出来的界面如下:
在该工程结构中,缺少一些目录,需要手动添加并设置。
添加test中的resources,然后右键选择Mark Directory As将其设置为相应的配置目录。
使用模板创建web的maven工程
创建工程-->选择maven-->勾选这个:
在选择模板时选中这一项:
创建好的界面如下:
仍然需要补齐目录:
注意:maven在创建完web工程后会有一个加载插件的过程,比较缓慢,可以在创建的倒数第二步加上一个键值对archetypeCatalog:internal
注意,刚创建好maven工程,会有一个部署的过程。特别是,如果本地仓库里是空的,那么idea会自动帮我们从中央仓库下载基本的jar包,这就需要耗费一些时间。
maven工程的一键构建
创建了maven之后,可以在idea中进行一键构建
最常用的就是打包。打包完的
如果列表中没有的,可以在方框的图标中来填写执行。比如:tomcat:run
相关配置和注意事项
要尽可能保持jdk的版本(以jdk9为例)和maven支持的jdk版本保持一致。在pom.xml上配置maven的默认版本如下:(和dependencies平级)
<properties>
<maven.compiler.source>9</maven.compiler.source>
<maven.compiler.target>9</maven.compiler.target>
</properties>
有些地方不支持上面的方式,还有另外一种配置插件的方式:(和dependencies平级)
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!--编译时用什么版本-->
<target>9</target>
<!--运行时用什么版本-->
<source>9</source>
<!--还可以设置编码方式-->
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
注意:通常编译失败就是因为版本的问题!!!!!!!!!!!!!!!!!!!!!!
这个配置的是这里的版本
要保持这里的版本和工程所用的jdk版本,还有tomcat版本保持一致或者兼容
maven默认使用的是tomcat6版本,如果使用的jdk版本过高,运行将会报错。如果想使用高版本的jdk,就需要配置提高tomcat的版本(以jdk9为例,要支持tomcat7+版本),添加如下插件:
运行时需要输入tomcat7:run才是运行新配置的tomcat
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!--重新配置端口-->
<configuration>
<port>8888</port>
</configuration>
</plugin>
</plugins>
</build>
JAR包冲突
当我们导入一个jar包坐标的时候,会自动将该jar包所依赖的所有jar包都导入,这样就会出现一个问题,就是可能有多个包都依赖同一个包。假如要导入的多个jar包都依赖于同一个jar包,并且版本不同,那么,最终被maven使用的是哪个版本呢?
第一种方式:谁写在前面,就用谁。
第二种方式:maven中的依赖包分为直接依赖包和传递依赖包,直接依赖包优先于传递依赖包。
- 传递依赖包:导入一个包时被动导入的依赖包
- 直接依赖包:直接导入的包,直接依赖包会覆盖传递依赖包
- 但是如果传递依赖包在dependencyManagement标签内,就会被锁定,无法再被覆盖。比如
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
但是要注意的是,dependencyManagement标签只是锁定版本,并没有实际导入jar包。仍然需要复制一份到该标签外来进行导入。
第三种方式,推荐使用。使用exclusions标签直接排除某个版本的包,比如:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
设置jar包的作用范围
可以限制jar包的依赖范围
比如设置jar包的作用域,使其只在编译时作用
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<!--添加作用域-->
<scope>provided</scope>
</dependency>