Maven

什么是maven

         它是一个项目管理工具,使用maven对java项目进行构建、依赖管理。

Pom.xml需要配置

什么是项目构建

         一个项目从编写源代码到编译、测试、运行、打包、部署、运行的过程

Maven项目构建过程

         maven将项目构建的过程进行标准化,每个阶段使用一个命令完成,下图展示了构建过程的一些阶段,后面章节详细介绍每个阶段,这里先大概了解下:

上图中部分阶段对应命令如下:

清理阶段对应maven的命令是clean,清理输出的class文件

编译阶段对应maven的命令是compile,将java代码编译成class文件。

打包阶段对应maven的命令是package,java工程可以打成jar包,web工程可以打成war包

 

运行一个maven工程(web工程)需要一个命令:tomat:run

 

Maven工程构建的优点

         1、一个命令完成构建、运行,方便快捷。

2、maven对每个构建阶段进行规范,非常有利于大型团队协作开发。

         一步构建,依赖管理,maven跨平台(基于java开发),提高开发效率

 

Maven项目工程目录约定

使用maven创建的工程我们称它为maven工程,maven工程具有一定的目录规范,如下:

Java项目显示下:

Project

  |-src

  |   |-main

  |   |  |-java       ——存放项目的.java文件

  |   |  |-resources  ——存放项目资源文件,如spring, hibernate配置文件

         |-webapp    —— webapp目录是web工程的主目录

            |-WEB-INF

              |-web.xml

  |   |-test

  |      |-java       ——存放所有测试.java文件,如JUnit测试类

  |      |-resources  ——测试资源文件

  |-target            ——目标文件输出位置例如.class、.jar、.war文件

  |-pom.xml          ——maven项目核心配置文件

将本地jar包安装到仓库:

将jar包直接放到仓库文件夹下是不能使用的

在命令行中执行命令:

 

依赖范围

  • compile:编译范围,指A在编译时依赖B,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。

 

  • provided:provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用, provided依赖在编译和测试时需要,在运行时不需要,比如:servlet-api , jsp-api被tomcat容器提供。

 

  • runtime:runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc的驱动包。由于运行时需要所以runtime范围的依赖会被打包。

 

  • test:test范围依赖在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,比如:junit。由于运行时不需要所以test范围依赖不会被打包。

   

system:system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使

在maven-web工程中测试各各scop。

索引:

<dependencies>  
          <dependency>  
               <groupId>junit</groupId>  
               <artifactId>junit</artifactId>  
               <version>4.10</version>  
               <scope>test</scope>  
          </dependency>  
   </dependencies>  

 

 

 

Pom配置

Pom.xml 需要配置

<build>
       <plugins>
          <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-compiler-plugin</artifactId>
             <configuration>
                 <source>1.7</source>
                 <target>1.7</target>
                 <encoding>UTF-8</encoding>
             </configuration>
          </plugin>
	 <!-- tomcat组件可以不配 -->
            <plugin>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>tomcat-maven-plugin</artifactId>
             <version>1.1</version>
             <configuration>
                 <!-- 可以灵活配置工程路径 -->
                 <path>/crm</path>
                 <!-- 可以灵活配置端口号 -->
                 <port>8080</port>
             </configuration>
          </plugin>
      </plugins>
   </build>

 

maven命令

maven命令

将项目发布到私服:在要发送的工程中执行:mvn deploy -DrepositoryId=releases

方法二:在eclipse中运行:clean install deploy

 

maven无法下载jar问题解决时可以在pom.xml 中添加:

<repositories>  
        <repository>  
            <id>public</id>  
            <name>aliyun nexus</name>  
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
            <releases>  
                <enabled>true</enabled>  
            </releases>  
        </repository>  
    </repositories>  
    <pluginRepositories>  
        <pluginRepository>  
            <id>public</id>  
            <name>aliyun nexus</name>  
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
            <releases>  
                <enabled>true</enabled>  
            </releases>  
            <snapshots>  
                <enabled>false</enabled>  
            </snapshots>  
        </pluginRepository>  
    </pluginRepositories>  

maven 引入本地包:

Maven引入本地依赖Jar到可执行Jar包中

在Maven中,默认地,是不会将依赖的Jar包打入可执行Jar包的,如果需要将依赖打入可执行Jar包,需要在pom中添加maven-assembly-plugin插件,这个很容易实现,但是在正规开发中不推荐这样使用,为什么?因为稍微大型一些的项目都至少有几十个依赖项,而每次打包都将这些Jar包打入可执行Jar,使得最后生成的可执行Jar体积非常大。标准的做法是,将所有的依赖Jar包都打入lib目录中,而在可执行Jar的MANIFEST.MF中指定lib路径即可。这也很容易实现,并不是本文的重点,本文的重点是如何将不在Maven中央仓库中的Jar包,或者说依赖本地的Jar包打入可执行Jar,并更新MANIFEST.MF文件。

例如在我的Maven项目中,需要依赖本地Jar,首先将依赖的Jar复制到src/main/resources/lib目录下,引用如下

<dependency>
<groupId>com.yuewen</groupId>
<artifactId>lucene</artifactId>
<version>1.0.0-SNAPSHORT</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/lucene-1.0.0-SNAPSHORT.jar</systemPath>
</dependency>

Maven 实现多环境打包

在pom.xml中添加profile配置:

 <!-- 环境 -->
    <profiles>
        <!-- 开发 -->
        <profile>
            <id>dev</id>
            <activation>
                <!--默认激活配置-->
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!--当前环境-->
                <profile.name>dev</profile.name>
                 <!--这个属性是自定义的-->
                <profile.baseUrl>http://192.168.1.58:6652</profile.baseUrl>
            </properties>
        </profile>
        <!-- 测试 -->
        <profile>
            <id>test</id>
            <properties>
                <!--当前环境-->
                <profile.name>test</profile.name>
                <profile.baseUrl>http://cloud.xxxx.com/rainbow</profile.baseUrl>
            </properties>
        </profile>
        <!-- 生产 -->
        <profile>
            <id>prd</id>
            <properties>
                <!--当前环境,生产环境为空-->
                <profile.name>prd</profile.name>
                <profile.baseUrl>http://api.xxx.cn/rainbow</profile.baseUrl>
            </properties>
        </profile>
    </profiles>

详情:https://www.cnblogs.com/owenma/p/7999023.html

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐