【问题标题】:Do the projects created by archetype plugins use old versions of dependencies?原型插件创建的项目是否使用旧版本的依赖项?
【发布时间】:2018-07-07 17:11:16
【问题描述】:

我在跑步

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。

我想知道原型插件创建的项目使用旧版本的依赖项是否普遍?

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

谢谢。

【问题讨论】:

    标签: java maven junit


    【解决方案1】:

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

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

    ... 是:pom.xml 中由maven-archetype-quickstart 生成的&lt;dependencies/&gt; 块是创建原型工件时这些依赖项的当前版本原样的快照。

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

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

    因此,当您从此原型创建项目时,静态 pom.xml 将使用您提供的值进行更新,更新后的版本是您新创建的项目的 POM。

    原型中的pom.xml 还包含&lt;dependencies/&gt;,例如:

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    

    &lt;dependencies/&gt; 块是完全静态的,并且在运行原型命令时无法通过您提供的任何内容进行更新,因此junit 依赖项将始终保持3.8.13.8.1 的选择是maven-archetype-quickstart 工件的最新版本创建时间:2010 年 4 月

    因此,可以公平地说,maven-archetype-quickstart 工件 - 相对于 &lt;dependencies/&gt; 块 - 已过时。原型所做的其他事情(使用您的 groupIdartifactId 等创建 pom.xml 并创建标准 Maven 项目结构)仍然有效。

    回答这个问题:

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

    你可以...

    • 更新maven-archetype-quickstart产生的版本
    • 使用比maven-archetype-quickstart 提供的版本更高的版本创建您自己的原型
    • 不使用原型创建自己的pom.xml

    【讨论】:

    • 谢谢。我修改了创建的 pom.xml 以更新 junit 的版本。但是编译不会通过,因为创建的测试java文件仍然使用的是旧版本的junit,最近的junit版本已经不再支持了。我还不知道如何创建自己的原型。有什么方法可以使用最新版本的 Junit 创建项目模板?
    • 无论如何创建项目(您自己的原型,提供的原型,手动),您都需要您的类与您的依赖项兼容,因此您需要更新您的测试类以使用 JUnit 5.x 构造。回复:“有什么方法可以使用最新版本的 Junit 创建项目模板”...要么手动创建项目,要么更新过期 maven-archetype-quickstart 提供的依赖项。
    猜你喜欢
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2021-12-30
    • 2010-11-25
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多