关闭。这个问题需要更多focused .它目前不接受答案。
想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .
7年前关闭。
Improve this question
有人能告诉我 Ant 和 Maven 之间的区别吗?我也从来没有用过。我知道它们用于自动化 Java 项目的构建,但我不知道从哪里开始。
最佳答案
在 Maven: The Definitive Guide ,我在介绍中写了Maven和Ant的区别,章节标题是"The Differences Between Ant and Maven" .这是一个答案,它结合了该介绍中的信息和一些附加说明。
简单比较
我向您展示这个只是为了说明在最基本的层面上,Maven 具有内置约定的想法。这是一个简单的 Ant 构建文件:
<project name="my-project" default="dist" basedir=".">
<description>
simple example build file
</description>
<!-- set global properties for this build -->
<property name="src" location="src/main/java"/>
<property name="build" location="target/classes"/>
<property name="dist" location="target"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init"
description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile"
description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file
-->
<jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
</target>
<target name="clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
在这个简单的 Ant 示例中,您可以看到如何准确地告诉 Ant 要做什么。有一个编译目标,其中包括将 src/main/java 目录中的源代码编译到 target/classes 目录的 javac 任务。您必须准确地告诉 Ant 您的源在哪里,您希望将生成的字节码存储在哪里,以及如何将所有这些都打包到 JAR 文件中。虽然最近的一些发展有助于使 Ant 减少过程,但开发人员使用 Ant 的经验是编码用 XML 编写的过程语言。
将前面的 Ant 示例与 Maven 示例进行对比。在 Maven 中,要从某个 Java 源创建 JAR 文件,您需要做的就是创建一个简单的 pom.xml,将源代码放在 ${basedir}/src/main/java 中,然后从命令行运行 mvn install .实现相同结果的示例 Maven pom.xml。
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
</project>
这就是您在 pom.xml 中所需的全部内容。从命令行运行 mvn install 将处理资源、编译源代码、执行单元测试、创建 JAR 并将 JAR 安装在本地存储库中以便在其他项目中重用。无需修改,您可以运行 mvn site,然后在 target/site 中找到一个 index.html 文件,其中包含指向 JavaDoc 的链接和一些关于您的源代码的报告。
诚然,这是最简单的示例项目。仅包含源代码并生成 JAR 的项目。遵循 Maven 约定且不需要任何依赖项或自定义的项目。如果我们想开始自定义行为,我们的 pom.xml 会变大,在最大的项目中,您可以看到非常复杂的 Maven POM 集合,其中包含大量插件自定义和依赖声明。但是,即使您的项目的 POM 文件变得更加庞大,它们也包含与使用 Ant 的类似大小项目的构建文件完全不同的信息。 Maven POM 包含声明:“这是一个 JAR 项目”和“源代码在 src/main/java 中”。 Ant 构建文件包含明确的说明:“这是项目”、“源代码在
src/main/java
中”、“针对此目录运行 javac
”、“将结果放入 target/classses
”、“从 . ...”等。在 Ant 必须明确说明过程的地方,Maven 有一些“内置”的东西,它只知道源代码在哪里以及应该如何处理。高层对比
这个例子中 Ant 和 Maven 的区别是什么? Ant ...
马文在哪里...
mvn install
时调用它.这个命令告诉 Maven 执行一系列序列步骤,直到它到达生命周期。作为整个生命周期旅程的一个副作用,Maven 执行了许多默认插件目标,这些目标执行诸如编译和创建 JAR 之类的事情。 Ivy 呢?
是的,所以像 Steve Loughran 这样的人会阅读这个比较并判罚犯规。他将谈论答案如何完全忽略称为 Ivy 的东西,以及 Ant 可以在最新版本的 Ant 中重用构建逻辑的事实。这是真实的。如果你有一群聪明的人使用 Ant + antlibs + Ivy,你最终会得到一个设计良好、有效的构建。尽管如此,我非常相信 Maven 是有道理的,我很乐意将 Ant + Ivy 与一个拥有非常敏锐的构建工程师的项目团队一起使用。话虽如此,我确实认为您最终会错过许多有值(value)的插件,例如 Jetty 插件,并且随着时间的推移,您最终会做大量不需要做的工作。
比 Maven 与 Ant 更重要
关于java - Ant 和 Maven 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/603189/