










先看一个maven构建的错误信息:Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.5.2:install
你有没有留意过,为什么 Maven 的基本执行单元叫 ”goal“ 而不是 "target" ?
这是一个很好的问题!
| 概念 | Maven | Ant | Gradle |
|---|---|---|---|
| 基本构建单元 | Goal(目标) | Target(目标) | Task(任务) |
| 构建文件 | pom.xml |
build.xml |
build.gradle |
| 执行语法 | mvn <goal> |
ant <target> |
gradle <task> |
| 生命周期 | 有明确的构建生命周期 | 无固定生命周期 | 基于任务依赖 |
| 依赖管理 | 内置(中央仓库) | 需要手动配置 | 灵活,兼容 Maven/Ivy |
<!-- Maven: 声明式配置,关注"做什么" -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<goals>
<goal>install</goal> <!-- 这里就是 goal -->
</goals>
</plugin>
<!-- Ant: 命令式脚本,关注"怎么做" -->
<target name="install" depends="compile,test">
<copy file="${dist}/myapp.jar" todir="${install.dir}"/>
</target>
graph TD A[Maven 生命周期 Lifecycle] --> B[阶段 Phase] B --> C[目标 Goal] D[clean 生命周期] --> E[pre-clean] E --> F[clean] F --> G[post-clean] H[default 生命周期] --> I[validate] I --> J[compile] J --> K[test] K --> L[package] L --> M[verify] M --> N[install] N --> O[deploy] P[site 生命周期] --> Q[site] Q --> R[deploy-site] S[插件 Plugin] --> T[目标 Goal] N -.->|由 install:install goal 实现| S
Maven 的结构:
clean、default、sitecompile、test、package、install以下面的错误信息为例:
Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.5.2:install (default-install)
on project sby-component-biz:
Failed to install artifact
com.serviceshare:sby-component-biz:jar:1.0.202602-SNAPSHOT:
/maven/LocalStore/com/serviceshare/sby-component-biz/1.0.202602-SNAPSHOT/sby-component-biz-1.0.202602-SNAPSHOT.jar
(Permission denied)
这里的结构是:
maven-install-plugininstallorg.apache.maven.plugins:maven-install-plugin:2.5.2:install这个错误发生在:
maven-install-plugininstall goal对应的 Maven 命令可能是:
mvn install # 或 mvn deploy
# 执行单个 goal
mvn clean:clean # clean 插件的 clean goal
mvn compiler:compile # compiler 插件的 compile goal
mvn surefire:test # surefire 插件的 test goal
# 执行生命周期阶段(会触发多个 goals)
mvn compile # 触发 compile 阶段的所有 goals
mvn install # 触发直到 install 阶段的所有 goals
# Jenkins 中常见的 Maven 配置
mvn clean deploy # 先执行 clean 生命周期,再执行到 deploy 阶段
<!-- Ant 的 build.xml -->
<project name="MyProject" default="dist" basedir=".">
<target name="init">
<!-- 初始化 -->
</target>
<target name="compile" depends="init">
<!-- 编译 -->
</target>
<target name="dist" depends="compile">
<!-- 打包 -->
</target>
</project>
执行:
ant dist # 执行 dist target 及其依赖的 targets
| 时期 | 工具 | 术语 | 特点 |
|---|---|---|---|
| 2000年 | Ant | Target | 基于 XML 的构建脚本,类似 Makefile |
| 2004年 | Maven | Goal | 约定优于配置,声明式构建 |
| 2012年 | Gradle | Task | 基于 Groovy/DSL,灵活且强大 |
Maven 选择 "Goal" 的原因:
设计哲学:
简单记忆:
goal → 想到 Maventarget → 想到 Anttask → 想到 Gradle此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。