JavaWeb系列6: Maven

本文对比了Maven和Gradle在Java项目构建和管理中的应用。Maven以依赖管理和项目信息管理为核心,通过中央仓库提供约定大于配置的功能。Gradle则采用Groovy声明项目设置,简化XML配置,动态实现版本管理,解决依赖冲突。两者均支持多模块构建,但Gradle提供了更灵活的项目设置方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaWeb系列6: Maven

本文是作者的读博客笔记和心得整理,也引用了一些比较好的博客文章,部分内容来源于网络,如有侵权,请联系作者。

Maven

在maven出来之前,都是用Ant作为一个构建工具,并未对项目中低端工程依赖和项目本身进行管理.
核心是:依赖管理, 项目信息管理, 中央仓库, 约定大于配置的核心功能使得Maven成为当前Java项目构建和管理工具的标准选择。

常用maven命令

mvn clean:运行清理操作
mvn clean compile: 表示运行清理之后进行编译
mvn clean test: 运行清理和测试
mvn clean package: 清理和打包
mvn clean install:运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用。
mvn clean deploy:运行清理和发布(发布到私服上面)

Maven使用格式

一个配置的示例:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.tengj</groupId>
    <artifactId>springBootDemo1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springBootDemo1</name>
</project>

第一行是XML头,指定版本号
project指定根元素
modelVersion指定当前POM模型的版本号
groupId,artifactId和version指定了一个项目的基本坐标.
groupId指定的是组,artifactId指定的是组中id,version指定版本号

接下来是依赖范围:
示例:

<project>
...
<dependencies>
    <dependency>
        <groupId>实际项目</groupId>
     <artifactId>模块</artifactId>
     <version>版本</version>
     <type>依赖类型</type>
     <scope>依赖范围</scope>
     <optional>依赖是否可选</optional>
     <!—主要用于排除传递性依赖-->
     <exclusions>
         <exclusion>
           <groupId>…</groupId>
          <artifactId>…</artifactId>
       </exclusion>
     </exclusions>
  </dependency>
<dependencies>
...
</project>

type:大部分时候为jar
scope:依赖的范围
optional:标记依赖是否可选
exclusions:用来排除传递性依赖

依赖范围

compile:默认范围,对于编译测试运行3种classpath全部有效
test:只在测试classpath有效,JUnit
provided:对于编译和测试有效,运行无效.
runtime:只在测试和运行有效,JDBC

和Gradle的比较

使用Groovy来声明项目设置,抛弃了基于XML的各种繁琐配置.
比如一个典型的Gradle项目:

dependencies {
// This dependency is exported to consumers, that is to say found on their compile classpath.
api 'org.apache.commons:commons-math3:3.6.1'

// This dependency is used internally, and not exposed to consumers on their own compile classpath.
implementation 'com.google.guava:guava:23.0'

// Use JUnit test framework
testImplementation 'junit:junit:4.12'

compile 'org.hibernate:hibernate-core:3.6.7.Final'
testCompile ‘junit:junit:4.+'
}

Gradle的优点是可以动态的实现版本管理,而且先天可以解决依赖冲突的问题.

多模块构建

一般一个项目分解为多个模块,需要定义一个parent POM来作为一组module的通用配置模型. 也可以用标签来定义一组子模块,
parent的配置会自动继承给子module.

Gradle也支持多模块构建,在parent的build.gradle中可以使用allproject和subproject来分别定义应用于所有项目/子项目,
子模块的定义放置在settings.gradle中,每一个模块代表一个project的对象实例.
执行gradle -q nice会依次打印出各模块的项目名称.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值