在我的项目中,我总是使用<dependency><dependency>
,但我可以在某个项目<parent></parent>
中看到pom.xml
,如:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
所以我想知道何时使用它。
答案 0 :(得分:1)
可以使用打包pom
声明父POM。它并不意味着分发,因为它仅从其他项目中引用。
将依赖关系pom声明为jar
的位置。因此,它可以包含在项目中,因此项目可以使用它的功能。
Maven父pom几乎可以包含所有内容,并且可以将它们继承到子pom文件中,例如
答案 1 :(得分:0)
用例<paraent>
用于存储工件版本和模块之间使用的编译器设置/版本的信息。
有关详细信息,请参阅以下内容Introduction to the POM
答案 2 :(得分:0)
依赖是您需要编译代码所需的库。这可以是您自己的代码,也可以是Apache Commons等库。
父项包含许多项目之间共享的信息,但实际构建没有任何信息。假设您有几个相关代码模块,并且您希望确保所有模块都使用相同版本的库。然后,您可以在每个模块的<dependencies>
部分中定义这些库,但您可以在父模块的<dependencyManagement>
部分中定义该版本。
父POM可以拥有自己的父级,因此您可以构建整个层次结构。
答案 3 :(得分:0)
<parent>
<dependencies>
<parent>
和<dependencies>
元素是两个不同的东西,但它们之间存在着相同的重要关系。
简单地说parent
定义了当前pom的父pom,dependencies
定义了当前pom的实际依赖关系。
父pom可以定义dependencies
,但也可以考虑子项Maven项目继承的许多其他内容(特别是允许配置许多内容的dependencyManagement
元素和build
元素)以某种方式作为dependencies
元素的超集
以下是elements inherited from the parent pom的列表:
groupId version description url inceptionYear organization licenses developers contributors mailingLists scm issueManagement ciManagement properties dependencyManagement dependencies repositories pluginRepositories build plugin executions with matching ids plugin configuration etc. reporting profiles
使用dependencies
和使用<parent>
?
我们只能使用第一个,只能使用第二个或两个
这取决于Maven项目的设计方式
试图列举所有可能的配置将是漫长的,并没有必要非常有帮助
所以我认为你应该保留parent
更像dependencies
的结构,因为它为子项目定义了更多的东西,但它也允许不重复你想要定义的实际配置一组项目。
因此,您应该支持parent
,因为您希望继承一些子Maven项目的整体配置,而不仅仅是依赖项列表。
您的示例非常适合使用<parent>
或dependencies
替代来说明客户项目的后果。
1)父母继承
此处项目继承自spring-boot-starter-parent
pom:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
因此,项目将继承dependencies
和dependencyManagement
中定义的任何内容,但它也将继承自super pom中定义的<build>
元素。
例如,您可以使用Java 8和UTF-8配置Maven编译器插件(您当然可以在子项目中重新定义):
<properties>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<resource.delimiter>@</resource.delimiter>
<maven.compiler.source>${java.version}</maven.compiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
此外,Spring Boot项目可能使用的其他一些插件也将在超级pom中定义,并由您的项目继承,例如:
<pluginManagement>
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>${start-class}</mainClass>
</configuration>
</plugin>
...
</plugins>
</pluginManagement>
请注意,父pom可以定义dependencies
,由子项目直接继承,但不是必需的
例如,spring-boot-starter-parent
没有定义子项目直接继承的任何dependency
,而是在dependency
中定义<dependencyManagement><dependencies>
。
这意味着这个父pom的孩子可能会使用依赖关系,但他们必须在dependencies
中明确说明
例如:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
请注意,版本不会被视为已继承。
2)没有父继承
您必须在Spring Boot应用程序中定义所有必需的依赖项,或者更直接地使用dependencyManagement
import
范围内的<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
依赖项,以便有一种方法来声明它们谢谢到依赖管理功能:
plugins
但在任何情况下,您都不会从父母配置的<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<springboot.version>1.5.2.RELEASE</springboot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${springboot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${springboot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>myClass</mainClass>
</configuration>
</plugin>
<plugins>
</build>
继承,因为您没有父母。
因此,您应该在项目的pom.xml中明确声明它们。
例如,要定义编译器版本,使用编码并配置构建以重新打包构建的组件(使其成为独立的可执行文件),您将不得不指定更多内容:
enter code here