首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >没有版本的maven依赖项

没有版本的maven依赖项
EN

Stack Overflow用户
提问于 2015-04-07 01:41:53
回答 5查看 87.2K关注 0票数 78

最近,我一直在对一段时间前开发的一个项目进行一些改进,以下是我的发现。pom文件中的许多依赖项没有指定版本,但它们已被解决。项目由1个根模块和2个子模块组成。使用聚合器模式,这意味着根本没有dependencyManagement部分。上面的项目只是简单地聚合了2个模块,这就是它所做的一切。子项目不会将其引用为父项目。他们有不同的父母。我不能理解的是,子项目本身和它们的父项目(事实上,它也没有dependencyManagement )都没有为一些依赖项指定版本。例如:

代码语言:javascript
复制
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>imap</artifactId>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jul-to-slf4j</artifactId>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
</dependency>

有人能帮我解决这个问题吗?maven是否使用某种默认策略来处理版本控制?默认策略是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-04-07 23:29:03

好吧,我想我还是自己接吧。当然,我看了一下dependency: tree,但我提到的所有依赖项都是树的一级成员。我没有立即注意到的是,dependencyManagement没有出现在父模块中,但是它存在于子模块中,而且更有趣的是它包含:

代码语言:javascript
复制
        <dependency>
            <groupId>io.spring.platform</groupId>
            <artifactId>platform-bom</artifactId>
            <version>1.0.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

我以前从未使用过Spring IO平台,所以这对我来说是一个全新的概念。事实证明,该平台包含了相当多的预配置依赖项:http://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions

票数 43
EN

Stack Overflow用户

发布于 2015-04-07 01:55:25

如果不定义工件的版本,maven是不可能工作的。它们应该在子模块或父模块的dependencyManagement标记中的某个位置定义。请检查您的pom层次结构。在项目的子模块目录中使用mvn help:effective-pom。您还可以使用mvn dependency:tree来找出在依赖项管理的结果中解析了哪些工件,以及包括版本号在内的全部工件信息。

票数 27
EN

Stack Overflow用户

发布于 2020-09-03 06:39:22

在pom中定义的每个maven依赖项必须具有直接或间接的版本,例如通过dependencyManagement或parent。也就是说,如果没有给出版本,则将使用dependencyManagement或父pom中提供的版本。

例如:在下面给出的pom (只提到重要部分)中,没有为工件jstl提供版本。但是,在"mvn dependency:tree“中,它显示包含jstl版本1.2。看一下spring-boot-starter-parent,对于2.3.3.RELEASE pom版本,它包含jstl版本1.2。

代码语言:javascript
复制
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.3.RELEASE</version>
</parent>

<dependencies>
   ....
   <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>jstl</artifactId>
   </dependency>
   ....
</dependencies>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29476472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档