我有 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/