java - Maven 目标的重点是什么?

标签 java spring maven

我有 Ruby on Rails 背景,现在正在学习 Java Spring MVC。当我尝试在 STS 中使用 Maven 编译我的代码时,它希望我包含一个目标。 All the guides I read on this seem vague and unclear.目标的意义何在?为什么我不能只编译我的源代码并运行它?

最佳答案

您必须了解 Maven 是复杂模块化

它没有任何“编译”您的代码或“运行”您的代码的概念。它的作用是按照 build lifecycle 的顺序触发 plugins .

运行 Maven 目标会触发特定的 Maven 插件。例如,运行 mvn compile 会触发 Maven compiler plugin .

对于刚开始接触 Java 的人来说,这一切似乎都有些矫枉过正,而且在 SO 上有很多“为什么 Maven 不能按它说的去做”的问题。

其中大部分源于对 Maven 是什么的根本误解。它不是(严格来说)旨在“编译和运行”您的代码。它旨在按特定顺序执行许多预配置的步骤。

当谈到“运行你的代码”时,这变得更加棘手:

  • 要使用 maven exec 插件运行您的代码,请调用 mvn exec:java。您显然需要配置插件
  • 要将您的代码作为带有嵌入式 Tomcat 服务器的 Web 应用程序运行,请调用 mvn tomcat7:run-war
  • 在嵌入式网络服务器调用 mvn gwt:run
  • 的 devMode 中将代码作为 GWT 应用程序运行

所有这些目标的共同点是它们会触发一个特定预配置的插件来执行您要求的任务。

值得进一步指出的是,Maven 旨在编译、测试和安装您的代码,而不是真正地运行它。因此,虽然可能存在用于运行代码的插件,但 Maven 的真正优势在于能够自动编译、测试代码并将其部署到 Maven 存储库。

最后一点,您链接的页面顶部的大红色警告说:

Apache Maven 1.x has reached its end of life, and is no longer supported.

注意。我们现在在 Maven 3.2.X .不要阅读古老和过时版本的文档。这只会让您感到困惑。

关于java - Maven 目标的重点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831148/

相关文章:

java - 为什么最小堆的删除的最坏情况运行时实现为数组 O(N)?

java - 从 Java 中调用 Jess 操作的对象

spring - 严重: A child container failed during start java. util.concurrent.ExecutionException : org. apache.catalina.LifecycleException:

java - Kotlin - Mockito 测试失败

java - 使用 Angularjs 从 Grails 后端获取 JSON 数据

java - 如何编写 junit 测试来查看返回的内容?

java - not-null 属性引用 null 或 transient 值 : com. project.test.entity.Stamp.createdAt

java - Spring PropertyPlaceHolder 问题

java - 当任何 PIT 突变失败时,maven 构建可能会失败,而不是突变覆盖?

Java 类加载器错误 : Caused by: java. io.IOException:流关闭