maven的pom.xml的依赖,什么情况下可以不写版本号?
以前见过的pom.xml文件,依赖中都是必须有版本号的。但今天看到别人写的一个关于SpringBoot的demo,依赖中没有版本号,也没有任何问题,项目能正常跑起来。pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>netgloo</groupId> <artifactId>spring-boot-mysql-hibernate</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-mysql-hibernate</name> <description>Use MySQL in Spring Boot web application with Hibernate</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.3.RELEASE</version> <relativePath /> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <start-class>netgloo.Application</start-class> <java.version>1.7</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
我猜原因在这段代码里:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.3.RELEASE</version> <relativePath /> </parent>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
确实这样,在ide工具或者eclipse中体现不出这个问题,引入集成构建,这种问题就都出来了。各种“unknow-version”,各种“jar is missing”
正常项目,最好都写上,不写具体版本号时,如果项目复杂度较低,依赖的开源项目少,那就还好。如果项目复杂度高,依赖了很多大的开源项目,那这些项目里自身又依赖了其它jar时,内部依赖jar极有可能出现版本冲突问题。在版本冲突出现时,早期不写具体版本号的写法,就会发现简直坑到死。
jar冲突,综合到具体版本上,才能针对性的引入这个老点的,那个新点的绕过去,甚至选择屏蔽哪个,都是要经过多次试验和研究的。动态无版本号写法,呵呵了,研究个p,过两天构建出的依赖jar也许版本又变了。。。
还有一种情况,使用了依赖管理器的也可以不写
找到答案了。
之前的猜想并没有错,添加“parent”标签里的内容后,“spring-boot-starter-parent”会为开发者提供常用jar的版本管理,所以我们不需要指定版本,使用人家提供好的就可以了。当然,指定也是可以的,这会覆盖官方默认的版本,不推荐。
以上。
官方文档传送门