AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77380925
Accepted
Timur Celikel
Timur Celikel
Asked: 2023-10-29 03:28:44 +0800 CST2023-10-29 03:28:44 +0800 CST 2023-10-29 03:28:44 +0800 CST

在默认生命周期的哪个 Maven 阶段/目标中,我的远程 pom 依赖项会被取消?

  • 772

我一直在努力理解默认生命周期的哪个阶段实际上将我的 pom.xml 中的远程依赖项拉到我的本地 .m2 文件夹中。

据我了解,mvn dependency:resolve使用 Maven 依赖插件来获取任何所需的远程依赖项。根据此文档,它应该绑定到生成源阶段。

但是,如果我运行mvn generate-sources,maven 似乎不会运行依赖项解析。

我想这是因为 Maven 依赖插件默认情况下不会运行,除非在我的 pom 中明确指定?

无论如何,如果我运行,我似乎只能点击此解析步骤,mvn compile这显示我的远程依赖项在资源插件和编译器插件运行之前放置的某种前置步骤中被拉下来。

└[~/IdeaProjects/youtube-spring-reactive-programming]> mvn compile
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------< com.javatechie:springboot-webflux-demo >---------------
[INFO] Building springboot-webflux-demo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok/1.18.22/lombok-1.18.22.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok/1.18.22/lombok-1.18.22.pom (1.5 kB at 6.1 kB/s)
Downloading from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok/1.18.22/lombok-1.18.22.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/projectlombok/lombok/1.18.22/lombok-1.18.22.jar (2.0 MB at 12 MB/s)
[INFO] 
[INFO] --- maven-resources-plugin:3.3.1:resources (default-resources) @ springboot-webflux-demo ---
[INFO] Copying 1 resource from src/main/resources to target/classes
[INFO] Copying 0 resource from src/main/resources to target/classes
[INFO] 
[INFO] --- maven-compiler-plugin:3.11.0:compile (default-compile) @ springboot-webflux-demo ---
[INFO] Changes detected - recompiling the module! :dependency
[INFO] Compiling 1 source file with javac [debug release 17] to target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.313 s
[INFO] Finished at: 2023-10-28T12:32:31-07:00
[INFO] ------------------------------------------------------------------------

如果我手动完成每个阶段,则在进入编译阶段之前我不会将远程依赖项拉下来:

validate
initialize
generate-sources
process-sources
generate-resources
process-resources
compile   <--

我似乎找不到任何有关mvn compile实际操作的详细文档。

问题:

启动依赖关系解析前置步骤的编译阶段有什么独特之处,该步骤似乎存在于阶段和更大的生命周期之外?

maven
  • 1 1 个回答
  • 29 Views

1 个回答

  • Voted
  1. Best Answer
    khmarbaise
    2023-10-29T05:23:34+08:002023-10-29T05:23:34+08:00

    mvn dependency:resolve最后执行将执行maven-dependency-plugin或更准确地说是resolve手动执行插件的目标(https://maven.apache.org/plugins/maven-dependency-plugin/resolve-mojo.html),而无需启动生命周期。

    第二个 Maven 本身不使用maven-dependency-plugin来解决依赖项(或下载它们)。这是由 Maven 本身完成的(准确地说是由解析器完成;目前并不那么重要)。

    生命周期和插件的现有绑定在适当的描述中链接。

    现在来进行依赖性解析(工件的下载)。

    如果您考虑绑定插件(如 maven-resources-plugin、maven-compiler-plugin等)的不同阶段,则运行 maven-resources-plugin 不需要下载工件(插件本身及其依赖项除外),但是正如您已经意识到的,运行 maven-compiler-plugin 必须先下载依赖项(这会导致将其放在类路径中),然后才能编译代码。

    插件中有标记(注释的属性),它们告诉核心在调用插件之前是否需要解析依赖项。

    在maven-compiler-plugin 源代码中显示如下内容:

    @Mojo(
            name = "compile",
            defaultPhase = LifecyclePhase.COMPILE,
            threadSafe = true,
            requiresDependencyResolution = ResolutionScope.COMPILE)
    public class CompilerMojo extends AbstractCompilerMojo {
        /**
    

    重要的部分是线requiresDependencyResolution = ResolutionScope.COMPILE。这负责告诉核心在执行插件本身之前解决依赖关系。

    如果您查看 maven-compiler-plugin 但现在转向目标testCompile,代码如下所示:

    @Mojo(
            name = "testCompile",
            defaultPhase = LifecyclePhase.TEST_COMPILE,
            threadSafe = true,
            requiresDependencyResolution = ResolutionScope.TEST)
    public class TestCompilerMojo extends AbstractCompilerMojo {
    

    这里的行:requiresDependencyResolution = ResolutionScope.TEST告诉核心解决范围内的所有依赖关系test(编译测试代码)。

    • 另外,在插件文档页面https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html上,您还会找到以下信息:
    • 需要执行 Maven 项目。
    • 需要范围内工件的依赖性解析:编译。
    • 目标是线程安全的并支持并行构建。
    • 自版本:2.0.
    • 默认绑定到生命周期阶段:编译。

    该行Requires dependency resolution of artifacts in scope: compile.相当于前面显示的源代码部分(文档页面是从源代码生成的)。

    因此,基于将Maven 编译器插件的目标compile绑定到它的生命周期阶段(如绑定所述)。compile

    准确地说,生命周期不是负责的部分,而是插件目标告诉核心在调用插件目标本身之前解决依赖关系。

    • 1

相关问题

  • Maven 将构建从 Linux 移植到 Windows 时出现问题

  • 部署到虚拟工件存储库时出现 405 错误

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve