我正在运行
mvn archetype:generate
然后选择maven-archetype-quickstart
原型插件。然后它使用pom.xml创建一个maven项目:
<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>ocean.earth</groupId>
<artifactId>mytest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mytest</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
我发现JUnit的版本是3.8.1,令人惊讶的是,鉴于最新版本的JUnit已经是5.0.1,我使用的是最新版本的Maven 3.5.2。
我想知道archetype插件创建的项目是否常常使用旧版本的依赖项?
如何让插件使用较新版本的依赖项创建项目?
感谢。
答案 0 :(得分:2)
这个问题的简短答案......
archetype插件创建的项目是否使用旧版本的依赖项?
...是:<dependencies/>
生成的pom.xml
中的maven-archetype-quickstart
块是这些依赖项的当前版本的快照,因为它们是原型工件已创建。
对于背景:原型是(或多或少)一个存档,其中包含一些静态内容以及用于将用户提供的值替换为该内容中的标记的机制。
maven-archetype-quickstart
包含一些静态内容(pom.xml
)并支持令牌替换,允许您为groupId
,artifactId
,projectVersion
提供自己的值等
因此,当您从此原型创建项目时,静态pom.xml
将使用您提供的值进行更新,更新后的版本将是您新创建的项目的POM。
原型中的pom.xml
还包含<dependencies/>
,例如:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependencies/>
块完全是静态的,在运行archetype命令时,您提供的任何内容都无法更新,因此junit
依赖项将始终保持3.8.1
。 3.8.1
的选择是在创建maven-archetype-quickstart
工件的最新版本时的结果: 2010年4月。
所以,可以说,maven-archetype-quickstart
工件 - 就<dependencies/>
块而言 - 过时了。原型所做的其他事情(使用pom.xml
,groupId
等创建artifactId
并创建标准Maven项目结构)仍然有效。
回答这个问题:
如何使插件使用较新版本的依赖项创建项目
你可以......
maven-archetype-quickstart
maven-archetype-quickstart
pom.xml