Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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中安装mvn到底做什么_Java_Maven_Pom.xml - Fatal编程技术网

Java 在maven中安装mvn到底做什么

Java 在maven中安装mvn到底做什么,java,maven,pom.xml,Java,Maven,Pom.xml,我刚开始使用Maven,有人告诉我在一个特定的目录中安装mvn mvn install到底做什么 我认为它会在当前文件夹中查找pom.xml,并开始按照该文件中指定的说明进行操作。这是正确的吗?您看过Maven的任何文档吗,例如 Nutshell版本:它将构建项目并将其安装到本地存储库中。它将运行与默认生命周期的任何阶段相关联的所有已配置插件的所有目标,直至“安装”阶段: 正如您所知,Maven是Apache提供的一种构建自动化工具,它的功能不仅仅是依赖关系管理。我们可以将其作为Ant和Make

我刚开始使用Maven,有人告诉我在一个特定的目录中安装
mvn

mvn install
到底做什么


我认为它会在当前文件夹中查找
pom.xml
,并开始按照该文件中指定的说明进行操作。这是正确的吗?

您看过Maven的任何文档吗,例如


Nutshell版本:它将构建项目并将其安装到本地存储库中。

它将运行与默认生命周期的任何阶段相关联的所有已配置插件的所有目标,直至“安装”阶段:


正如您所知,Maven是Apache提供的一种构建自动化工具,它的功能不仅仅是依赖关系管理。我们可以将其作为Ant和Makefile的对等体,下载所需的所有依赖项

mvn安装
上,它基于super
pom.xml
下的所有子项目上的项目配置
pom.xml
(根pom)构建依赖关系树,并在用户文件夹下名为
.m2
的目录中下载/编译所有需要的组件。必须解决这些依赖关系,才能在没有任何错误的情况下构建项目,
mvn install
是一个可以下载大多数依赖关系的实用程序

此外,Maven中还有其他UTIL,如
dependency:resolve
,可在任何特定情况下单独使用。mvn的构建生命周期如下:

  • 流程资源
  • 编译
  • 过程测试资源
  • 测试编译
  • 测试
  • package
  • 安装
  • 部署

  • 此mvn的测试阶段可以通过使用标志来忽略
    -DskipTests=true
    -DskipTests=true
    -Dmaven.test.skip=true
    的缩写形式

    .m2文件夹中的Setting.xml中进行更改。您可以使用指向本地回购的链接,这样一旦下载的jar就不会被反复下载

    <url>file://C:/Users/admin/.m2/repository</url>
     </repository>
    
    file://C:/Users/admin/.m2/repository
    
    安装:安装目标由«Apache Maven安装插件»提供:

    ApacheMaven安装插件 安装插件在安装阶段用于将工件添加到本地存储库。安装插件使用POM中的信息(
    groupId
    artifactId
    version
    )来确定工件在本地存储库中的正确位置

    本地存储库是存储构建所需的所有工件的本地缓存。默认情况下,它位于用户的主目录(
    ~/.m2/repository
    )中,但可以使用
    ~/.m2/settings.xml
    元素在
    ~/.m2/settings.xml
    中配置该位置

    -

    话虽如此,确切的目标是:

    install:install
    用于自动安装项目的主要工件(JAR、WAR或EAR)、其POM以及由特定项目生成的任何附加工件(源代码、javadoc等)

    -

    有关目标的更多详细信息,请参阅页面


    有关构建生命周期的一般详细信息以及目标在构建生命周期中的位置,请参阅本页。

    简短回答


    mvn安装

    • pom中指定的所有工件(依赖项)添加到本地存储库中(来自远程源)

    mvn安装主要任务是1)下载依赖项和2)构建项目

    而作业1现在由intellij等ID负责(它们在POM下载任何依赖项)


    mvn安装现在主要用于作业2。

    在maven构建生命周期的任何阶段,都会执行之前的所有目标


    例如:mvn安装将调用mvn验证、mvn编译、mvn测试、mvn包等。

    需要指出的是,
    install
    install:install
    是不同的事情,
    install
    是一个阶段,在这个阶段,maven所做的不仅仅是将当前项目模块工件安装到本地存储库,它首先检查远程存储库。另一方面,
    install:install
    是一个目标,它只需构建当前项目并将其所有构件安装到本地存储库中(例如,安装到
    .m2
    目录中)。

    假设您在开源库上运行“mvn install”。然后,在使用我们首先编译的开源库的项目上运行“mvn安装”。在运行“mvn安装”时,是否会首先在本地repo中查找JAR?或者它依赖于POM文件?@Kevin它应该先本地,因为这就是重点。如果它不在本地存储库中,它将查找您配置的任何存储库(或默认设置),如果找到它,将其安装到您的本地repo中。我怀疑您可以将其配置为总是跳过本地回购,尽管我不知道如何不查找它。您看过Maven的规范文档了吗?Apache的站点这样解释了mvn安装的目的:“在大多数情况下,安装:安装目标不需要任何配置,它需要在默认构建生命周期的安装阶段安装项目的POM和工件文件。”这是因为Apache的doc未能解释“mvn安装”的实际功能,所以喜欢这张海报的人和我自己都在寻找答案。这是一个非常合理的问题。请注意,如果您想跳过所有与测试相关的目标,请使用:-Dmaven.test.skip=true(而不是-DskipTests=true)。此答案无法说明install命令最终在本地安装工件,即在