archetype插件创建的项目是否使用旧版本的依赖项?

时间:2018-01-29 03:24:43

标签: java maven junit

我正在运行

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插件创建的项目是否常常使用旧版本的依赖项?

如何让插件使用较新版本的依赖项创建项目?

感谢。

1 个答案:

答案 0 :(得分:2)

这个问题的简短答案......

  

archetype插件创建的项目是否使用旧版本的依赖项?

...是:<dependencies/>生成的pom.xml中的maven-archetype-quickstart块是这些依赖项的当前版本的快照,因为它们是原型工件已创建。

对于背景:原型是(或多或少)一个存档,其中包含一些静态内容以及用于将用户提供的值替换为该内容中的标记的机制。

maven-archetype-quickstart包含一些静态内容(pom.xml)并支持令牌替换,允许您为groupIdartifactIdprojectVersion提供自己的值等

因此,当您从此原型创建项目时,静态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.13.8.1的选择是创建maven-archetype-quickstart工件的最新版本时的结果: 2010年4月

所以,可以说,maven-archetype-quickstart工件 - 就<dependencies/>块而言 - 过时了。原型所做的其他事情(使用pom.xmlgroupId等创建artifactId并创建标准Maven项目结构)仍然有效。

回答这个问题:

  

如何使插件使用较新版本的依赖项创建项目

你可以......

  • 更新maven-archetype-quickstart
  • 生成的版本
  • 创建自己的原型,其版本高于maven-archetype-quickstart
  • 提供的版本
  • 在不使用原型
  • 的情况下创建自己的pom.xml