项目构建工具

简介: 项目构建工具

 一般面试中被问到的项目构建工具,常常会回答的是Maven


   今天大概了解了一下目前项目构建构建有Maven,Ant,Gradle


Gradle 是一个构建工具,它是用来帮助我们构建app的,构建包括编译,打包等过程。我们可以为Gradle指定构建规则,然后他就会根据我们的命令自动为我们构建app。


Gradle配置文件


在Android Studio中新建一个工程,可以得到如下的工程结构图:

Android Studio中的一个Module即为Gradle中的一个Project。上图的app目录下,存在一个build.gradle文件,代表了app Module的构建脚本,它定义了应用于本模块的构建规则。我们可以看到,工程根目录下也存在一个build.gradle文件,它代表了整个工程的构建,其中定义了适用于这个工程中所有模块的构建规则。


Maven配置


如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。

以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包、多一个Jar包往往会报一些让人摸不着头脑的异常。


而Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率


  • Maven基本命令

-v:查询Maven版本


本命令用于检查maven是否安装成功。


Maven安装完成之后,在命令行输入mvn -v,若出现maven信息,则说明安装成功。


compile:编译


将java源文件编译成class文件


test:测试项目


执行test目录下的测试用例


package:打包


将项目打成jar包


clean:删除target文件夹


install:安装


将当前项目放到Maven的本地仓库中。供其他项目使用


  • 什么是Maven仓库?

Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库 和 中央仓库。


本地仓库:Maven本地的Jar包仓库。

中央仓库: Maven官方提供的远程仓库


  • 依赖冲突

若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,但Maven采用了两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。


1.短路优先


本项目——>A.jar——>B.jar——>X.jar

本项目——>C.jar——>X.jar

若本项目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X.jar,并且C.jar也引用了X.jar。


在此时,Maven只会引用引用路径最短的Jar。


2.声明优先


若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁。

聚合

  1. 什么是聚合?
    将多个项目同时运行就称为聚合。
  2. 如何实现聚合?
    只需在pom中作如下配置即可实现聚合:
<modules>
    <module>web-connection-pool</module>
    <module>web-java-crawler</module>
</modules>


继承

  1. 什么是继承?
  2. 在聚合多个项目时,如果这些被聚合的项目中需要引入相同的Jar,那么可以将这些Jar写入父pom中,各个子项目继承该pom即可。
  3. 如何实现继承?
  1. 父pom配置:将需要继承的Jar包的坐标放入标签即可
<dependencyManagement>
    <dependencies>
          <dependency>
            <groupId>cn.missbe.web.search</groupId>
            <artifactId>resource-search</artifactId>
            <packaging>pom</packaging>
            <version>1.0-SNAPSHOT</version>
          </dependency> 
    </dependencies>
</dependencyManagement>

子pom配置

<parent>
      <groupId>父pom所在项目的groupId</groupId>
      <artifactId>父pom所在项目的artifactId</artifactId>
      <version>父pom所在项目的版本号</version>
</parent>
 <parent>
      <artifactId>resource-search</artifactId>
      <groupId>cn.missbe.web.search</groupId>
      <version>1.0-SNAPSHOT</version>
</parent>


Ant 构建


  基于另一个构建文件中的一个目标调用Ant从而可以将构建文件分解为多个Ant构建文件,它会实例化一个新的Ant工程。属性值能在新ant工程中使用。如果需要在一个构件文件中通过Ant命令去执行另一个Ant项目,或者说要执行本项目的子项目的构件文件。这时Ant这个核心任务就派上用场了。简单地说Ant任务的作用就相当于在命令行通过Ant命令执行构件文件。值得注意的是Ant任务依赖于target元素,需要在某个target元素中使用,不能在target元素外独立使用。

ant项目的结构如下:

project-root/
├── src/
│   ├── java/                 # Java源码
│   └── resources/            # 资源文件(如配置文件)
├── lib/                      # 第三方库(JAR文件)
├── web/                      # Web资源(如JSP文件)
│   ├── WEB-INF/
│   │   ├── lib/              # Web应用库
│   │   ├── web.xml           # Web应用配置文件
│   │   └── classes/          # 编译后的类文件
├── build/                    # Ant构建输出目录
└── build.xml                 # Ant构建脚本
目录
相关文章
|
6月前
|
XML Java Maven
【Maven技术专题】「实战开发系列」盘点Maven项目中打包需要注意到的那点事儿
【Maven技术专题】「实战开发系列」盘点Maven项目中打包需要注意到的那点事儿
143 1
|
Java 应用服务中间件 Apache
自动化构建工具Maven
自动化构建工具Maven
|
6月前
|
IDE Java Maven
Maven或Gradle:构建工具的使用和配置等知识讲解梳理
Maven或Gradle:构建工具的使用和配置等知识讲解梳理
203 1
|
Java Maven
Maven插件开发简明教程(1)
Maven插件开发简明教程(1)
64 0
Maven插件开发简明教程(1)
|
存储 算法 Java
Maven自动化构建依赖管理工具
Maven自动化构建依赖管理工具
187 0
|
存储 Java API
Gradle筑基篇(六)-使用Maven实现组件化类库发布
前面几篇文章我们讲解了关于关于`Gradle的基础`,`Gradle生命周期`,`Gradle相关Api`的讲解,以及`Gradle自定义插件`,这篇文章我们就来讲解下如何使用`Maven进行组件化发布`
|
Java 编译器 API
Gradle筑基篇(五)-Gradle自定义插件实战
前面几篇文章笔者对Gradle的一些基础认知,groovy基础语法,以及Gradle 项目中常用的一些api进行了讲解。今天笔者再来讲解一些关于`Gradle插件`的使用
|
XML 缓存 搜索推荐
Gradle构建工具极简教程
Gradle构建工具极简教程
340 0
Gradle构建工具极简教程
|
Java Maven
面试官:开发过Maven插件吗?我:开发过啊。。。
转眼间,今天已经是假期的第4天了。今天要给大家分享点啥呢?想了半天,想起了之前去某宝面试的情景。记得面试前自己基于Maven开发过一些简单实用的插件,而且在自己的本地环境中一直在使用,极大的提高了我的开发和工作效率。恰好在面试时,某宝的面试官问了我一个问题:开发过Maven插件吗?我:开发过啊。面试官:那你给我讲讲你是如何开发的呢?我:吧啦吧啦吧啦。。。面试官:下周入职吧!我:好的。就这样,我拿到了Offer。
143 0
|
Java 程序员 Apache
走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com 本文是微信公众号【Java技术江湖】的《走进JavaWeb技术世界》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。