Maven实战

目录

 

一、开发工具中的配置

二、Maven工程的类型

三、Maven工程的结构

四、Maven工程之间的关系

依赖

继承

聚合

五、常用插件

编译器插件:

编译器插件

Tomcat插件

六、Maven的常用命令


一、开发工具中的配置

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私服仓库

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值