【问题标题】:What archetype to choose for a simple java project为简单的 java 项目选择什么原型
【发布时间】:2025-12-31 05:30:15
【问题描述】:

mvn archetype:generate 提供了太多的选项,我希望用 junit 测试用例创建一个简单的 java 实用程序。我想知道我应该在这里使用什么原型?

【问题讨论】:

标签: java maven maven-archetype


【解决方案1】:

我使用两种原型。这取决于您将创建什么样的应用程序。

如果您想要一个 Web 应用程序,请使用 maven-archetype-webapp,或者如果您想要一个简单的应用程序,请使用 maven-archetype-quickstart。它们很有用,因为您可以毫无问题地扩展它们。

【讨论】:

  • 请注意,这是默认情况下在 Eclipse 插件中的(至少现在是这样)。
  • 这里我要创建maven-archetype-webapp并下载maven目录但是报错。
  • 我该怎么办?
【解决方案2】:

我正在使用如下命令:

mvn archetype:generate -Dfilter=org.apache.maven.archetypes:

我将仅从org.apache.maven.archetypes groupId 获得简短列表。像我的前辈所说的那样,最好的开始是maven-archetype-quickstartmaven-archetype-webapp

【讨论】:

【解决方案3】:

当您执行mvn archetype:generate 时,默认选择会出现在大括号() 中,例如(1274),如果您向上滚动查看#1274 是什么,它通常是尝试或开始使用的默认 Java 原型,如果做简单的 Java 项目,那么选择是安全的。

【讨论】:

  • 默认值现在是 333,而不是 3
  • 现在是380: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
  • 它表示例如,而不是 i.e,所以它确实暗示默认选择是 3。
  • 现在是 644 org.apache.maven.archetypes:maven-archetype-quickstart:1.1
  • 现在是 874 :)
【解决方案4】:

这就是你需要的

 mvn archetype:generate -DgroupId=com.example -DartifactId=foobar -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

参考: Build Run Java Maven Project Command Line

【讨论】:

    【解决方案5】:

    我认为你应该使用maven-archetype-simple

    编辑

    根据mavendocumentation

    • maven-archetype-quickstart 包含示例 Maven 项目的原型。
    • maven-archetype-simple 包含简单 Maven 项目的原型。

    【讨论】:

    • 我在 Eclipse 选择中没有看到 maven-archetype-simple,但我看到了 maven-archetype-quickstart。它们是一样的吗?
    • 请看一下我后来参考 maven 文档的编辑。关于eclipse插件:我个人更喜欢手动编辑pom.xml并从命令提示符运行命令行。
    【解决方案6】:

    我将从一个非常简单的 pom.xml 文件开始,它只包含您需要的内容。类似的东西

    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-module</artifactId>
      <version>1</version>
    </project>
    

    来自http://maven.apache.org/guides/introduction/introduction-to-the-pom.html

    【讨论】:

    • 虽然这个建议可能有价值,但它并不能回答问题。据我了解,原型的全部意义在于将开发人员从这种样板文件中拯救出来,并使遵循最佳实践变得容易。
    【解决方案7】:

    您可以使用 The Practical Developer 中的任何基本功能:

    Java 8 + 常用测试库:

    mvn archetype:generate -DgroupId=[your-project-groupId] -DartifactId=[your-project-name] -DarchetypeGroupId=com.thepracticaldeveloper -DarchetypeArtifactId=archetype-java-basic-tpd -DarchetypeVersion=1.0.0
    

    Java 9 + 常用测试库

    mvn archetype:generate -DgroupId=[your-project-groupId] -DartifactId=[your-project-name] -DarchetypeGroupId=com.thepracticaldeveloper -DarchetypeArtifactId=archetype-java-basic-tpd -DarchetypeVersion=1.0.0 -Djava-version=9
    

    它们包括 JUnit 4、Mockito 和 AssertJ,以及一个默认清单文件,以防您希望 jar 文件可执行。更多信息:https://thepracticaldeveloper.com/archetypes/

    免责声明:我是该博客的作者。

    【讨论】:

    • 我得到了groupId,但archetypeGroupId 是干什么用的?
    • archetypeArtifactId一起用于定位maven仓库中的archetype。
    【解决方案8】:

    maven-archetype-quickstart 包含示例 Maven 项目的原型。 maven-archetype-simple 包含简单 Maven 项目的原型。

    如果出现错误 通过将 Maven 原型目录添加到 Eclipse 来修复它。步骤如下:

    打开窗口 > 首选项> Maven > 原型

    点击Add Remote Catalog并添加以下内容:

    目录文件:http://repo1.maven.org/maven2/archetype-catalog.xml

    描述:maven 目录

    注意:在创建您的第一个 Maven 项目期间需要互联网连接。

    【讨论】:

    • 下载上述目录并手动设置但对我不起作用。
    【解决方案9】:

    现在默认的原型编号是 1092 1092: 远程 -> org.apache.maven.archetypes:maven-archetype-quickstart (包含示例 Maven 项目的原型。)

    【讨论】:

      【解决方案10】:

      您可能需要考虑Java Archetype:它具有合理的默认值,可以按照最佳实践(包括 JUnit 测试)快速启动 Java 项目。我认为它是maven-archetype-quickstart 的现代继承者。

      例如:mvn archetype:generate -DarchetypeGroupId=io.github.oliviercailloux -DarchetypeArtifactId=java-archetype -DgroupId=mygroupid -DartifactId=myartifactid -DinteractiveMode=false.

      免责声明:我是作者。

      有关替代方案的更多信息,这里是that project’s README 的一部分(它提供的链接比此处复制的要多)。

      官方快速入门原型

      简单 Java 项目的官方原型(Apache's Maven Getting Started Guide 和 Apache Maven Cookbook 提到)是 maven-archetype-quickstart,或者 org.apache.maven.archetypes:maven-archetype-quickstart。

      恕我直言,它应该被视为已弃用,因为它有几个弱点。

      • 一个重要的问题是它创建的项目依赖于 JUnit 4。当前版本的 JUnit 5 有很大不同,它提供了改进的 API 等。
      • 小弱点:它的默认版本是 1.0-SNAPSHOT,应该是 1.0.0-SNAPSHOT 以遵循推荐的和通常的方案。
      • 另一个小弱点:它会创建为 1.7 JVM 配置的项目。如果您特别需要支持旧安装,这可能是合适的,但对于新项目来说,选择合理的最新 JVM 是更合理的默认规则。例如,Java 8 引入了 lambda 表达式,您可能不想错过。

      我的原型还默认提供日志记录,我认为这很有用,比 sysout 更好地扩展并且不会造成伤害,还有 Guava,我认为这有助于丰富 Java。

      Maven Central 中的其他快速入门原型

      为了尽可能共同努力并避免重复浪费,我积极寻找与我的目标相同的其他原型:提供具有合理默认值的简单原型,以轻松启动现代 Java 项目。 (这主要是在 2020 年 6 月左右完成的。)

      在互联网上进行一般搜索后,我找到了 The Practical Developer。在与我联系时,他写信给我(通过电子邮件)说他不定期研究他的原型,因此更愿意拒绝在这样的项目上进行合作。

      由于网络上的搜索没有发现其他有用的结果,而且我没有找到适合我需要的专门搜索工具,所以我实现了一个简单的原型浏览器。它列出了 Maven Central 中可用的所有原型。手动审查的项目太多了,因此,我选择了那些 groupId 和 artifactId 至少存在三年并在去年更新的项目,希望找到长期维护的项目,我想这表明更有可能是一个高质量的项目。 (当然,这个过滤器可能遗漏了与所述目标完全匹配的优质原型;我无法知道。作为一个恰当的例子,这个原型没有通过那个过滤器,因为我随着时间的推移改变了它的 artifactId。)

      然后,我根据 POM 中的原型描述手动过滤结果列表,并进一步查看(通常在官方网站上)其中一些有希望的原型。只有com.github.ngeor:archetype-quickstart-jdk8 被发现是合适的候选人。但它的作者写信给我说他“这些天并没有真正使用/维护原型”。

      【讨论】:

        最近更新 更多