Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven依赖关系管理的好处_Java_Maven_Continuous Integration - Fatal编程技术网

Java Maven依赖关系管理的好处

Java Maven依赖关系管理的好处,java,maven,continuous-integration,Java,Maven,Continuous Integration,我不确定我是否真的理解Maven最强大的特性—依赖关系管理 在开发项目时,我需要在编写代码时添加所有依赖项。因此,在使用Maven构建项目时,我已经下载了所有依赖项 那么依赖项管理的意义是什么呢?多亏了Maven,例如,您不需要下载依赖项并将其放入Tomcat上的lib。它是由maven自动完成的。您可以直接在pom.xml文件中查看所有依赖项以及其他设置 依赖关系管理只是Maven的主要功能之一。我认为您应该问问自己,什么是附加任务(外部lib、部署、文档等)您正在项目中执行,看看Maven是

我不确定我是否真的理解Maven最强大的特性—依赖关系管理

在开发项目时,我需要在编写代码时添加所有依赖项。因此,在使用Maven构建项目时,我已经下载了所有依赖项


那么依赖项管理的意义是什么呢?

多亏了
Maven
,例如,您不需要下载依赖项并将其放入
Tomcat
上的
lib
。它是由maven自动完成的。您可以直接在
pom.xml
文件中查看所有依赖项以及其他设置


依赖关系管理只是
Maven
的主要功能之一。我认为您应该问问自己,什么是附加任务(外部lib、部署、文档等)您正在项目中执行,看看Maven是否可以通过其插件帮助您完成这些任务。

假设您已经下载了所有必要的JAR并保存在库中。现在,您希望将代码移动到许多机器中。 因此,现在您必须将所有文件传输到另一台机器

如果您在发送时错过了一些jar,或者说将来您想要更新版本的jar,那么您是否希望将其发送到jar中的所有机器,并从lib中删除旧版本,或者编写一个配置,一次完成所有操作


一旦项目变得更大,您将感受到Maven的真正本质。它只是pom.xml您需要注意所有jar管理。

Maven的依赖关系管理在您处理多个项目、跨多个开发机器和多个开发的环境中最有意义。 想象一下最简单的场景:

Project_1
   \lib
       \log4j.jar
Project_2
   \lib
       \log4j.jar
Project_3
   \lib
       \log4j.jar
在开发过程中,您需要将log4j.jar文件复制粘贴到所有这些项目中,这将转换为本地和任何可能使用的SCM上使用的额外磁盘空间,并且需要进入每个项目并将其定义为库(将其添加到类路径)。如果要更改jar的版本,需要重复该过程。 如果你使用Maven,你需要做的就是

  • 定义在线存储库(示例)

  • 为您的项目创建pom:

    <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.MY.COMPANY</groupId>
    <artifactId>NAME_OF_PROJECT</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    
    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        </dependency>
    
    </dependencies>
    
    
    4.0.0
    我的公司
    

  • 如果没有这个功能,你会怎么做?@Seelenvirtuose你的意思是我们需要它仅仅是因为当我们使用Maven构建时,我们无法以某种方式向依赖项添加路径,因此Maven只需要它们,这样它就可以自己完成构建工作了吗?不。我的意思是:如果你没有依赖项管理工具,你会如何处理依赖项(库)你的项目已经完成了吗?想一想。考虑几个可能有一些共同点的项目。现在考虑将项目放入源库(Git,Svn,…),以便其他开发人员也可以使用它。考虑到所有这些,一个只声明依赖项的机制(顺便说一句,它是文本)和一个神奇的工具是一个好方法。@sellenvirouse,您使用Maven下载所有库,并将它们下载的目录添加到您的类路径?您希望每次都将jar文件推送到git repo,并在克隆/签出时下载它们吗?好的,但是如果没有首先安装的依赖项,我无法开始编码。在开始编写代码之前,您是否首先运行maven来下载它们?好的,但是在maven在其默认目录中下载依赖项之后,例如,如何使用它们从IDE运行项目?我需要将目录添加到我的类路径中吗?不,默认情况下,它将以Maven Dependencies的名称添加到Java BuildPath中。创建一个示例应用程序并尝试。如果您的IDE是
    Eclipse
    ,那么您需要将此项目创建为Maven项目,
    Eclipse
    将自动读取您的
    pom.xml
    文件并下载依赖项。您还需要注意项目的性质:jar、war等,但是您仍然需要更改每个项目中的pom.xml,对吗?它总是有意义的。不管你是否独自工作……它在处理依赖关系等许多方面都有帮助。我在任何地方都有意义,至少在实践中是如此。我甚至将其用于概念验证项目。自从你建立了回购协议(在你的mavent设置中),创建一个新的项目是一个错误。让我编辑我的答案。@CuriosityGuy:是的,您必须维护pom,它是一个模块描述符。通用属性和依赖项可以在超级pom(父级)中引用。无论从哪个角度看,你都需要依赖管理,maven或ant和ivy。但是对于maven,它是开箱即用的,并且支持ant脚本