目录
一、开发工具中的配置
Eclipse配置
Idea配置
二、Maven工程的类型
【1】POM工程
POM工程是逻辑工程。用在父级工程或聚合工程中。用来做jar包的版本控制。
【2】JAR工程
该工程最后将会打包成jar,用作jar包使用,SpringBoot的工程有内置Tomcat,可以直接运行。 【3】WAR工程 该工程最后将会打包成war,发布在服务器上的工程。
三、Maven工程的结构
四、Maven工程之间的关系
依赖
依赖的传递性:传递性依赖是Maven2.0以后的新特性。假设我们的项目依赖于一个库(A),而这个库(A)又依赖于其他库(B)。我们不必自己去找出所有这些依赖(B库),我们只需要直接依赖的A库,Maven会隐式的把这些库(B)间接依赖的库也加入到我们的项目中。一般的,这些项目的所有依赖都会加入到项目中,或者从父项目继承,或者通过传递性依赖。如果A依赖了B,那么C依赖A时会自动把A和B都导入进来。
依赖的排除:<exclusions>标签: 用来排除传递性依赖 其中可配置多个<exclusion>标签,每个<exclusion>标签里面对应的有groupId, artifactId, version三项基本元素。注意:不用写版本号。如下:表示排除mz_common中的springboot的依赖
<dependencies>
<dependency>
<groupId>com.mz</groupId>
<artifactId>mz_common</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
依赖的范围
依赖范围就决定了我们配置的依赖坐标 在什么情况下有效,什么情况下失效:
<scope>compile</scope>
这是默认范围。如果没有指定,就会使用该依赖范围。表示该依赖在编译和运行时都生效。
<scope>provided</scope>
已提供依赖范围。使用此依赖范围的Maven依赖。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍(如:servlet-api) <scope>runtime</scope>
runtime范围表明编译时不需要生效,而只在运行时生效。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。 <scope>system</scope> 系统范围与provided类似,不过你必须显式指定一个本地系统路径的JAR,此类依赖应该一直有效,Maven也不会去仓库中寻找它。但是,使用system范围依赖时必须通过systemPath元素显式地指定依赖文件的路径。 <scope>test</scope>
test范围表明使用此依赖范围的依赖,只在编译测试代码和运行测试的时候需要,应用的正常运行不需要此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要。Junit的jar包就在测试阶段用就行了,你导出项目的时候没有必要把junit的东西到处去了就,所在在junit坐标下加入scope-test <scope>Import</scope>
import范围只适用于pom文件中的<dependencyManagement>部分。表明指定的POM必须使用<dependencyManagement>部分的依赖。注意:import只能用在dependencyManagement的scope里。
继承
如果A工程继承B工程,则代表A工程默认依赖B工程依赖的所有资源,且可以应用B工程中定义的所有资源信息。被继承的工程(B工程)只能是POM工程。 注意:在父项目中放在<dependencyManagement>中的内容时不被子项目继承,不可以直接使用,放在<dependencyManagement>中的内容主要目的是进行版本管理。里面的内容在子项目中依赖时坐标只需要填写 <group id>和<artifact id>即可。(注意:如果子项目不希望使用父项目的版本,可以明确配置version)。
聚合
当我们开发的工程拥有2个以上模块的时候,每个模块都是一个独立的功能集合。开发的时候每个平台都可以独立编译,测试,运行。这个时候我们就需要一个聚合工程。在创建聚合工程的过程中,父工程必须是一个POM工程(Maven Project)(聚合项目必须是一个pom类型的项目,jar项目war项目是没有办法做聚合工程的),各子模块可以是任意类型模块(Maven Module)。聚合包含了继承的特性。聚合时多个项目的本质还是一个项目。这些项目被一个大的父项目包含。且这时父项目类型为pom类型。同时在父项目的pom.xml中出现<modules>表示包含的所有子模块。
五、常用插件
编译器插件:
通过编译器插件,我们可以配置使用的JDK或者说编译器的版本,在settings.xml文件中配置全局编译器插件:
找到profiles节点,在里面加入profile节点,具体配置如下:
<profiles>
<profile>
<!-- 定义的编译器插件ID,全局唯一,随便命名 -->
<id>jdk-1.8</id>
<!-- 插件标记,activeByDefault :true默认编译器,jdk提供编译器版本 -->
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<!-- 配置信息source-源信息,target-字节码信息,compilerVersion-编译过程版本 -->
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
在POM中配置编译器插件
<build>
<plugins>
<!-- 配置maven的编译插件 -->
<plugin>
<!--插件坐标 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<!-- -->
<configuration>
<!-- 源代码使用JDK版本-->
<source>1.8</source>
<!-- 源代码编译为class文件的版本,要保持跟上面版本一致-->
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
编译器插件
Maven在打包时默认只将src/main/resources里的配置文件拷贝到项目中并做打包处理,而非resource目录下的配置文件在打包时不会添加到项目中。我们的配置文件,一般都放在:src/main/resources ,然后打包后配置文件就会在target的classes下面放着。如果我们想把非resources下面的文件也打包到classes下面,需要在pom.xml添加如下配置:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
Tomcat插件
我们如果创建war项目,最后必然要部署在服务器上,部署方式之前有以下两种:
(1)部署在远程服务器上 (2)将IDEA和外部tomcat产生关联,然后将项目部署在外部tomcat上
现在学习一个新的方式,不再依赖外部的tomcat,而是使用maven提供了tomcat插件,我们只需要做如下配置:
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 配置Tomcat监听端口 -->
<port>8081</port>
<!-- 配置项目的访问路径(Application Context) -->
<path>/</path>
</configuration>
</plugin>
</plugins>
打包插件(跳过单元测试)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
六、Maven的常用命令
clean :清除已编译信息,删除工程中的target目录
compiler :只编译, 相当于javac命令
package: 打包,包含编译,打包两个功能
install :本地安装, 包含编译,打包,并安装到本地仓库
deploy:完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库