Maven:"依赖与模块"

Sol*_*anG 6 maven-3 maven

我想知道两者之间的区别.从我的理解依赖需要一个版本等,但模块可以没有版本定义,它采用父版本.还有更多吗?

Tun*_*aki 9

依赖关系和模块是不同的概念.


Maven关于依赖关系的书中:

Maven可以管理内部和外部依赖项.Java项目的外部依赖项可能是库,例如Plexus,Spring Framework或Log4J.Web应用程序项目根据包含服务类,模型对象或持久性逻辑的另一个项目来说明内部依赖性.

简而言之,一个依赖说:"要构建我的项目,我需要使用这个库".

Maven中的依赖关系由其坐标定义,坐标由4个元素组成:

  • groupId:这些groupId组是一组相关的工件.它通常类似于Java包名称.例如,它groupId org.apache.mavengroupIdApache Maven项目生成的所有工件的基础.
  • artifactId:这artifactId是项目的主要标识符.生成工件时,将使用该工件命名此工件artifactId.的artifactId,groupId组合必须是唯一的.换句话说,您不能拥有两个具有相同artifactId和的单独项目groupId.而且,artifactId对于给定的,你不能拥有相同的东西groupId.
  • version:当工件被释放时,它将以版本号发布,例如"1.0","1.1.1"或"1.1.2-alpha-01".您还可以使用所谓的快照版本来处理正在开发的组件,例如"1.0-SNAPSHOT".
  • classifier:不需要分类器,通常不使用.当你需要从生产单一项目的多种文物只有相关的:它则作为在文件名的区别,否则将被用做简单的artifactIdversion,从而发生冲突.

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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <dependencies>
    <dependency>
      <groupId>org.some.project</groupId>
      <artifactId>my-project</artifactId>
      <version>4.0</version>
    </dependency>
    ...
  </dependencies>
  ...
</project>
Run Code Online (Sandbox Code Playgroud)

这声明了对my-project由给定坐标标识的库的依赖性.


模块用于多模块Maven项目的上下文中.从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
                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.codehaus.mojo</groupId>
  <artifactId>my-parent</artifactId>
  <version>2.0</version>
  <packaging>pom</packaging>

  <modules>
    <module>my-project</module>
    <module>another-project</module>
  </modules>
</project>
Run Code Online (Sandbox Code Playgroud)

你说这个项目,由org.codehaus.mojo:my-parent:2.0:pom,标识,2个模块,是my-projectanother-project.因此,在构建时my-parent,也将构建这两个模块.