Java如何通过Maven管理项目依赖

项目的依赖

Java最大的一个优势之一应该是整个生态中无数的框架和API,我们创建实际的项目不可避免的都需要用到这些框架和API,而它们通常都是以JAR包的形式提供。我们之前在编译项目的时候,需要在classpath上存放依赖的JAR包。而且这些外部的JAR包还会有其他依赖。我们需要递归地一个个去下载所有这些外部依赖,并且要确保下载的版本都是正确的,当项目越来越复杂的时候,这是极其麻烦的事情,比如碰到JAR Hell的问题。

Maven现在来拯救我们了,Maven可以自动帮我们做依赖管理,我们需要做的就是在POM文件里指定依赖JAR包的名称、版本号,Maven会自动下载,递归地去下载所有依赖,我们可以从具体的依赖添加工作解放出来了。

通过Maven定义依赖

之前的例子是一个完全自包含的项目,不需要额外的包依赖,因为它实在太简单了。我们来让这个例子稍微复杂一点,在打印"Hello World!"的时候同时打印出日期和时间,我们希望使用Joda提供的时间库来让帮助我们简化时间相关的处理代码:

package com.tianmaying.mavendemo;

import org.joda.time.LocalTime;

public class HelloWorld {
  public static void main(String[] args) {
    LocalTime currentTime = new LocalTime();
    System.out.println("The current local time is: " + currentTime);
    NewComer newComer = new NewComer();
    System.out.println(newComer.sayHello());
  }
}

我们使用Joda Time包提供的LocalTime类来获取和打印当前时间。

这时如果我们执行mvn compile将会报出编译错误。需要将 Joda Time这个库添加到我们的POM依赖中:

  <dependencies>

    ...

    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.2</version>
    </dependency>
  </dependencies>

上面这段XML定义了这个项目的依赖。在<depency>元素中,包含三个子元素:

  • <groupId> 类似于项目所属的组织,所依赖的包也属于某一个组织
  • <artifactId> 依赖包的名称
  • <version> 依赖包的版本

依赖还有一个范围(scope)的属性,有三种取值:

  • compile表示这个依赖在编译时应该存在,这是scope的默认值
  • provided表示这个依赖不仅在编译时需要,同时应该在运行时也存在,比如Java Servlet API的依赖
  • test表示依赖在编译和测试时需要,但是运行时不要求存在,比如JUnit的依赖,运行时是不需要的

此时运行mvn compile或者mvn package,Maven应该可以解析到Joda库,并将其从中央仓库下载,构建成功啦!

Maven仓库

Maven仓库可以认为是基于Maven的一个构件(主要时Jar包)管理工具,你可以从里面找构件,也可以往里面增加构件。如果你用过Ant就会知道,通过Ant来管理项目时,我们一般都需要一个lib文件夹,各种依赖的Jar包都会放进去,而且为了协作的一致性,通常还需要放到代码版本管理系统中。现在轻松简单了,基于基于依赖的信息,Maven就可以自动地以递归的方式下载所有的依赖,直到整个依赖树都下载完毕并放到你的本地仓库中。Maven仓库本质上存储了Jar包和元数据信息,通过原信息能够准确定位到Jar包,从而能够获取和修改。

Maven有三种类型的仓库:

  • 本地仓库:本地仓库默认在用户目录下,包含了下载的所有依赖
  • 中央仓库:中央仓库由Maven自己提供的,本地仓库中的没有依赖默认都会去中央仓库查找,下载后会存放到本地仓库
  • 远程仓库:远程仓库是远程服务器上可访问的仓库, 本质类似于中央仓库(只不过中央仓库是权威罢了,而且你不能乱动:)。远程仓库可以本地网络中或者互联网上,一般团队内部会设置一个内部的远程仓库,这样可以解决安全共享,网络代理等问题。

Maven首先会从本地仓库,然后是中央仓库,最后如果pom文件中配置了远程仓库,会到远程仓库中查找依赖。

远程仓库需要配置.settings文件,需要加入类似这样的配置:

<repositories>
  <repository>
    <id>tianmaying</id>
    <url>http://tianmaying.com/maven2/lib</url>
  </repository>
</repositories>

我们学习过程中,使用Maven自带的中央仓库就足以应付绝大多数情况了,不需要任何额外的配置。

快照依赖

Maven还提供一个非常方便的功能:快照依赖。快照依赖指的是那些还在开发中的内部依赖包。与其经常地更新版本号来获取最新版本,不如你直接依赖项目的快照版本。快照版本的每一个build版本都会被下载到本地仓库,即使该快照版本已经在本地仓库了。总是下载快照依赖可以确保本地仓库中的每一个build版本都是最新的。这对我们快速迭代开发是一个非常酷的特性。

以上就是Java如何通过Maven管理项目依赖的详细内容,更多关于Maven管理项目依赖的资料请关注我们其它相关文章!

(0)

相关推荐

  • 基于Maven骨架创建JavaWeb项目过程解析

    IDEA版本:2020.1 骨架选项名称: org.apache.maven.archetypes:maven-archetype-webapp 本项目的Maven坐标设置: 设置优先从本地获取骨架: archetypeCatalog=internal 构建过程的控制台打印: "C:\Program Files\Java\jdk1.8.0_251\bin\java.exe" -Dmaven.multiModuleProjectDirectory=C:\Users\User-Dai\Ap

  • 导出maven项目依赖的jar包(图文教程)

    注意使用mvn命令是需要配置好maven的环境变量 一.导出到自定义目录中 在maven项目下创建lib文件夹,输入以下命令: mvn dependency:copy-dependencies -DoutputDirectory=lib maven项目所依赖的jar包都会复制到项目目录下的lib目录下 这是我需要导出的jar包: 项目的根目录: 打开cmd,进入项目根目录(pom.xml文件也在这里),并执行目录,lib文件如没有手动创建也会自动创建: 稍等片刻,maven便完成了复制 二.导出

  • 解决java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包问题

    今天遇到了这样一种情况,自己的maven项目中并没有引用的jar包出现在了Maven Dependencies的依赖包中.而我在pom.xml自己没有没有引入啊. 图示 怀疑是自己的alibaba 的druid所依赖的包: <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.14</version>

  • java 中maven pom.xml文件教程详解

    maven pom.xml文件教程详解,具体内容如下所示: <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/maven-v4_0_0.x

  • Maven配置项目依赖使用本地仓库的方法汇总(小结)

    Maven配置项目使用本地仓库有以下方式实现: 1.类似本地仓库,但是属于本地依赖,比如某个JAR包是引用第三方的,直接放在了项目的lib文件夹,那么此时可以如下配置项目的POM: <dependency> <groupId>ldapjdk</groupId> <artifactId>ldapjdk</artifactId> <scope>system</scope> <version>1.0</vers

  • idea中创建maven的Javaweb工程并进行配置(图文教程)

    学完maven后,可以创建maven的javaweb工程,在创建完成后还需要一些配置,下面来说下具体步骤,在这里我创建的是一个模块,创建web项目的方式和创建模块一样 1.创建一个模块,点new-Module 2.选择maven,然后把对勾打上,选骨架,一定要选择第二个webapp骨架,如图 3.设置GroupId和ArtifactId,ArtifactId最好设置的和模块名称一样 4.设置maven的相关信息,如图 5.设置模块的名称和存储位置 6.点击完成,当出现红框中的内容的时候表示创建成

  • JAVA maven项目使用钉钉SDK获取token、用户

    本文介绍了JAVA maven项目使用钉钉SDK获取token.用户,分享给大家,具体如下: 将SDK放一个文件里,记住文件地址.D:\eclipse-workspace\项目名\模块名\lib win+r cmd 敲下面的命令: [进入相应盘]   D: [进入文件地址]   cd D:\eclipse-workspace\项目名\模块名 [运行命令]  mvn install:install-file -DgroupId=com.dingtalk.api -DartifactId=top-a

  • Intellj Idea中的maven工程Java文件颜色不对,未被识别的解决

    问题: 打开一个新的maven工程,发现.Java文件是这样的: 其实是编辑器未识别成maven工程. 解决: 1.点击侧边栏Maven 2.选择导入工程的pox.xml文件 3.恢复正常 补充知识:idea项目在maven projects中显示灰色的解决办法 在使用idea的过程中,遇到其中一个maven模块变成灰色,如下所示: 造成这个的原因可能是忽略了maven模块,可以尝试如下解决方法:在idea中maven的setting中找到ignored files,看右边的面板中是否将变灰的m

  • Java如何通过Maven管理项目依赖

    项目的依赖 Java最大的一个优势之一应该是整个生态中无数的框架和API,我们创建实际的项目不可避免的都需要用到这些框架和API,而它们通常都是以JAR包的形式提供.我们之前在编译项目的时候,需要在classpath上存放依赖的JAR包.而且这些外部的JAR包还会有其他依赖.我们需要递归地一个个去下载所有这些外部依赖,并且要确保下载的版本都是正确的,当项目越来越复杂的时候,这是极其麻烦的事情,比如碰到JAR Hell的问题. Maven现在来拯救我们了,Maven可以自动帮我们做依赖管理,我们需

  • 如何使用Maven管理项目?Maven管理项目实例

    最近的练手项目使用的是 Maven 在管理项目,在使用 Maven 管理项目时,三层的开发时分模块开发的,parent-dao-service-web,所有的spring+struts + Hibernate的依赖都是加在 parent 上,dao-service-web都是作为子模块,在模块之间的关系处理的时候出现了几个问题: junit测试包的传递依赖失效了 多个配置文件的读取问题 我在 parent 工程没有添加 Junit 的依赖,在编写 dao 模块是添加了 Junit 的 jar 包

  • 使用java连接Redis,Maven管理操作

    pom配置 <?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

  • maven 隐式依赖引起的包冲突解决办法

    包冲突 1.使用maven管理项目时可能会遇到包冲突的情况比如:log4j-over-slf4j.jar 和 slf4j-log4j12.jar这两个包同时一起运行时就会有问题. 2.这种冲突可能是显式依赖导致,也可能是隐式依赖导致. 显式依赖,直接可以从pom.xml文件的<dependency>中看到两个冲突包的引用. 隐式依赖,在pom.xml的<dependency>无法看到冲突的包,而是由<dependency>引入的包间接引入的. 解决 先确认哪些依赖间接引

  • maven多模块项目依赖管理与依赖继承详解

    目录 maven多模块项目依赖管理与依赖继承 1.指定父模块与默认继承 2.依赖管理 关于maven项目依赖继承问题 只需要在父项目中加入 并且把父项目已POM的形式 然后在子项目中以<parent>标签 maven多模块项目依赖管理与依赖继承 1.指定父模块与默认继承 dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承) 父模块的pom <?xml version="1.0" encoding="UTF-8

  • Java开发之普通web项目转为Maven项目的方法

    前言 Maven是基于项目对象模型(Project Object Model),可以通过一小段描述信息来管理项目的构建.报告和文档的项目管理工具,提供了一个仓库的概念,统一管理项目所依赖的第三方jar包,最大可能避免了由于环境变量的不同在不同电脑之间无法运行的问题,Struts2.Hibernate都是采用maven部署的项目. 现在网上有许多普通web项目转换为maven项目的博文,但由于项目的不同,所需的步骤及必须的转换步骤也不同.因此,本文章将以一个基于SpringMVC,Spring,H

  • Maven管理SpringBoot Profile详解

    1. Spring Profile Spring可使用Profile绝对程序在不同环境下执行情况,包含配置.加载Bean.依赖等. Spring的Profile一般项目包含:dev(开发), test(单元测试), qa(集成测试), prod(生产环境).由spring.profiles.active属性绝定启用的profile. SpringBoot的配置文件默认为 application.properties(或yaml,此外仅心properties配置为说明).不同Profile下的配置

  • java 配置MyEclipse Maven环境具体实现步骤

     java 配置MyEclipse Maven环境 虽然我的大部分项目已经迁到Idea上去了,但是在写部分小的测试程序的时候还是习惯性的会点开MyEclipse.之前使用第三方库的时候 我会习惯的下载jar包,然后build path导入,但是在idea中貌似通过配置maven依赖更方便,于是我在MyEclipse中也想使用pom.xml来导入依赖,在尝试的过程中遇到了些问题,我这里是记录解决这些问题的方法. 环境 Myeclipse for spring  2014 JRE 8 Maven 3

随机推荐