Maven 马文:“我不知道。”;依赖关系与模块”;
我想知道两者的区别。据我所知,依赖项需要一个版本等,但模块可以在没有版本的情况下定义,它采用父版本。还有更多吗?依赖项和模块是不同的概念Maven 马文:“我不知道。”;依赖关系与模块”;,maven,maven-3,Maven,Maven 3,我想知道两者的区别。据我所知,依赖项需要一个版本等,但模块可以在没有版本的情况下定义,它采用父版本。还有更多吗?依赖项和模块是不同的概念 从“关于依赖项”部分: Maven可以管理内部和外部依赖关系。Java项目的外部依赖可能是一个库,如Plexus、Spring框架或Log4J。web应用程序项目依赖于包含服务类、模型对象或持久性逻辑的另一个项目来说明内部依赖关系 简单地说,依赖项是这样说的:“要构建我的项目,我需要使用这个库” Maven中的依赖项由其定义,由4个元素组成: groupI
从“关于依赖项”部分: Maven可以管理内部和外部依赖关系。Java项目的外部依赖可能是一个库,如Plexus、Spring框架或Log4J。web应用程序项目依赖于包含服务类、模型对象或持久性逻辑的另一个项目来说明内部依赖关系 简单地说,依赖项是这样说的:“要构建我的项目,我需要使用这个库” Maven中的依赖项由其定义,由4个元素组成:
:groupId
对一组相关工件进行分组。它通常类似于Java包名。例如,groupId
groupId
是ApacheMaven项目生成的所有工件的基础org.apache.maven
groupId
:artifactId
是项目的主要标识符。当您生成一个工件时,这个工件将被命名为artifactId
。artifactId
,artifactId
组合必须是唯一的。换句话说,您不能有两个具有相同groupId
和artifactId
的独立项目。此外,对于给定的groupId
,您不能拥有相同的groupId
artifactId
:发布工件时,会使用版本号发布,例如“1.0”、“1.1.1”或“1.1.2-alpha-01”。您还可以为正在开发的组件使用快照版本,如“1.0-snapshot”version
:不需要且通常不使用分类器。只有当您需要从单个项目中生成多个工件时,它才是相关的:然后它在文件名中起到区别作用,否则只需使用分类器
和artifactId
即可进行区分,从而产生冲突version
<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>
<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>
您的意思是,这个由
org.codehaus.mojo:my parent:2.0:pom
标识的项目声明了两个模块,它们分别是我的项目
和另一个项目
。因此,当您构建我的父模块时,这两个模块也将被构建。从概念上讲,它们是不同的,但它们也同时存在
按照惯例,所有这些组件、模块和库都使用由组id、工件id和版本组成的唯一名称进行引用。除非您另有需要(我很少遇到),否则模块确实可以从父模块继承其版本,但您可以选择更改它
A类似于项目的子项目。它允许您将一个大项目划分为更小的部分,这些部分可以单独管理,并最终聚合以构建您需要的任何内容。我们可以把汽车想象成最终产品,由发动机、车轮、椅子等几个模块组成
依赖项是项目或模块编译和/或运行所需的库。回到我们的汽车,它确实需要一个引擎模块来工作。但是,当前版本的发动机本身需要某种类型(版本)的活塞才能正常运行。太大了就不合身,太小了就根本不起作用
应用到一个java项目中,您可以想象有几个模块访问一个DB,调用一些web服务,提供一个UI,所有这些模块都由它们的父级链接在一起。此外,DB模块可能需要一个特定的DB驱动程序(MYSql、Oracle等),与您正在使用的DB版本相匹配,web服务模块需要一个HTTP库,等等。对汽车的示例进行了很好的解释,使其更容易可视化!谢谢。@SoltanG我很高兴,很高兴这对你有帮助。结合Tunaki在技术上更详细的回答,您应该有一个更清晰的概述。一个模块可以像依赖关系一样被不同的项目多次使用吗?@jon你有具体的例子吗?通常,模块生成的工件安装在公司的存储库中,这样它们就可以在其他项目中重用。我现在终于明白了。我有一个“pom”项目,它有3个模块(数据模型、utils和helpers),这个pom项目是我的API项目的父项目。在api中,这3个模块现在是依赖项。现在我开始一个新的微服务项目,我还需要3个相同的依赖项。不再需要将它们作为模块。谢谢,所以我假设包含的模块本身需要定义pom(它本身是一个单独的项目),而依赖项可能只是存储库中不需要pom的工件?谢谢。@SoltanG好吧,如果它是maven repo中的一个依赖项,那么它应该有自己的pom来描述它自己可能依赖的其他库,这样maven在构建项目时也可以下载它们。您的依赖项的依赖项被称为。然而,pom是由制作它们的人定义的,您只需要在项目/模块中引用它们,然后神奇就会发生:-)@Morfic谢谢。我明白了。如果这是我们在回购协议中维护的依赖关系,那么我们也会有一个Pom。谢谢。一个模块可以像依赖项一样被不同的项目多次使用吗?@jon是的,因为在这种情况下,您会将其视为依赖项(注意“使用”一词)。最初的模块可以用作同一版本的另一个模块的依赖项,也可以完全用作其他项目的依赖项。