maven - 标签parent、dependency和plugin之间有什么区别(Maven)

标签 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.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>my-app</name>
    <url>http://maven.apache.org</url>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.3.RELEASE</version>
    </parent>

    <dependencies> 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency> 
            <groupId>org.springframework</groupId> 
            <artifactId>spring-context</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
    </dependencies>
</project>

为什么我必须指定依赖项两次?我如何使用这三个标签?

最佳答案

parent 是一个“继承”的 POM,它基本上通过覆盖的方式与当前的 POM 结合起来。 (您可以使用“mvn help: effective-pom”来打印组合结果)。因此,父级中的所有依赖项和插件都将成为您的(以及所有托管依赖项版本,这是在 spring-boot 占多数的情况下)。

依赖项指定类路径上编译、测试或运行项目(取决于其范围)所需的 Artifact 。

plugin 是在构建时执行的 Artifact (如编译器、报告生成器等)。

我建议阅读关于maven的好的教程或书籍,我的简单解释不足以充分利用它。 https://maven.apache.org/articles.html

关于maven - 标签parent、dependency和plugin之间有什么区别(Maven),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29991985/

相关文章:

java - MacOS : Workspace defines a VM that does not contain a valid jre/lib/rt. jar 上的 Maven 警告

java - Maven 带来 "test"传递依赖为 "compile"

java - 在 bazel 中导入 jar 时出现错误的魔法 efbfbdef 错误

java - 将 SNAPSHOT 部署到 oss.jfrog.org (JCenter)

java - 即使分析了主分支,Sonarcloud 也无法分析 PR

java - 我可以从命令行运行 Eclipse 项目,但无法通过 Eclipse 运行它

maven - 如何在maven中运行powershell脚本

Maven 原型(prototype) : Modify artifactId

java - 如何在普通java项目中使用maven项目jar

maven - 如何创建空目录作为 distribution.xml 的一部分?