在本文中,我们将探讨三个主要构建JVM生态系统的Java构建自动化工具– Ant,Maven和Gradle

我们将介绍它们中的每一个,并探讨Java构建自动化工具是如何演变的。

2. Apache Ant

最初, Make 是除了自行开发的解决方案之外 唯一的构建自动化工具 。Make自1976年以来一直存在,因此,它在Java早期用于构建Java应用程序。

但是,C程序中的许多约定都不适合Java生态系统,所以最好将Ant作为更好的替代方案发布。

**Apache Ant(“另一个整洁的工具”)是一个Java库,用于自动化Java应用程序的构建过程。**此外,Ant可用于构建非Java应用程序。它最初是Apache Tomcat代码库的一部分,并于2000年作为独立项目发布。

在许多方面,Ant与Make非常相似,并且它非常简单,因此任何人都可以在没有任何特定先决条件的情况下开始使用它。Ant构建文件是用XML编写的,按照惯例,它们被称为build.xml。

构建过程的不同阶段称为“目标”。

以下是具有HelloWorld主类的简单Java项目的build.xml文件示例:

<project>
    <target name="clean">
        <delete dir="classes" />
    </target>
    <target name="compile" depends="clean">
        <mkdir dir="classes" />
        <javac srcdir="src" destdir="classes" />
    </target>
    <target name="jar" depends="compile">
        <mkdir dir="jar" />
        <jar destfile="jar/HelloWorld.jar" basedir="classes">
            <manifest>
                <attribute name="Main-Class"
                  value="antExample.HelloWorld" />
            </manifest>
        </jar>
    </target>
    <target name="run" depends="jar">
        <java jar="jar/HelloWorld.jar" fork="true" />
    </target>
</project>

此构建文件定义了四个目标:clean,compile,jar和run。例如,我们可以通过运行来编译代码:

ant compile

这将首先触发目标清理,这将删除“classes”目录。之后,目标编译将重新创建目录并将src文件夹编译到其中。

**Ant的主要好处是它的灵活性。Ant不强加任何编码约定或项目结构。**因此,这意味着Ant要求开发人员自己编写所有命令,这有时会导致难以维护的巨大XML构建文件。

由于没有约定,只知道Ant并不意味着我们将很快理解任何Ant构建文件。习惯于使用不熟悉的Ant文件可能需要一些时间,与其他更新的工具相比,这是一个缺点。

起初,Ant没有内置的依赖管理支持。但是,由于依赖管理在以后的几年中成为必需,Apache Ivy被开发为Apache Ant项目的子项目。它与Apache Ant集成,遵循相同的设计原则。

但是,由于在使用不可管理的XML构建文件时没有内置支持依赖关系管理和挫折的初始Ant限制导致了Maven的创建。

3. Apache Maven

Apache Maven是一个依赖项管理和构建自动化工具,主要用于Java应用程序。Maven继续像Ant一样使用XML文件,但是更易于管理。这里的规则名称是约定优于配置

虽然Ant提供了灵活性并且需要从头开始编写所有内容,但Maven依赖于约定并提供预定义的命令(目标)

简而言之,Maven允许我们专注于我们的构建应该做什么,并为我们提供了实现它的框架。Maven的另一个积极方面是它为依赖管理提供了内置支持。

Maven的配置文件包含构建和依赖管理指令,按照惯例称为pom.xml。此外,Maven还规定了严格的项目结构,而Ant也提供了灵活性。

下面是一个pom.xml文件的示例,该文件用于同一个简单的Java项目,其中包含以前的HelloWorld主类:

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
      http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>baeldung</groupId>
    <artifactId>mavenExample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <description>Maven example</description>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

但是,现在项目结构已经标准化,并符合Maven惯例:

+---src
|   +---main
|   |   +---java
|   |   |   \---com
|   |   |       \---baeldung
|   |   |           \---maven
|   |   |                   HelloWorld.java
|   |   |                   
|   |   \---resources
|   \---test
|       +---java
|       \---resources

与Ant相反,无需手动定义构建过程中的每个阶段。相反,我们可以简单地调用Maven的内置命令。

例如,我们可以通过运行来编译代码:

mvn compile

正如官方页面所述,Maven的核心可以被认为是一个插件执行框架,因为所有工作都是通过插件完成的。Maven支持各种可用插件,并且每个插件都可以进行额外配置。

其中一个可用的插件是Apache Maven Dependency Plugin,它具有一个复制依赖项目标,可以将我们的依赖项复制到指定的目录。

要显示此插件的运行情况,让我们在pom.xml文件中包含此插件,并为依赖项配置输出目录:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>target/dependencies
                          </outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

这个插件将在一个包阶段执行,所以如果我们运行:

mvn package

我们将执行此插件并将依赖项复制到target / dependencies文件夹。

还有一篇关于如何使用不同的Maven插件创建可执行JAR 的现有文章。此外,有关详细的Maven概述,请查看Maven的核心指南,其中探讨了Maven的一些主要功能。

Maven变得非常受欢迎,因为构建文件现在已经标准化,与Ant相比,维护构建文件的时间要少得多。但是,虽然比Ant文件更标准化,但Maven配置文件仍然会变得庞大而繁琐。

Maven的严格约定的代价是不如Ant灵活。目标定制非常困难,因此与Ant相比,编写自定义构建脚本要困难得多。

尽管Maven在使应用程序的构建过程更容易和更标准化方面取得了一些重大改进,但由于其灵活性远低于Ant,因此仍然需要付出代价。这导致了Gradle的创造,它结合了两者的优点–Ant的灵活性和Maven的功能。

4. Gradle

Gradle是依赖关系管理和构建自动化工具,它基于Ant和Maven的概念

关于Gradle,我们可以注意到的第一件事就是它不使用XML文件,这与Ant或Maven不同。

随着时间的推移,开发人员越来越有兴趣使用特定于域的语言 - 这简单地说,允许他们使用为特定域定制的语言来解决特定域中的问题。

这是由Gradle采用的,它使用基于Groovy的DSL 。由于该语言专门用于解决特定的域问题,因此这导致较小的配置文件较少混乱。Gradle的配置文件通常称为build.gradle。

下面是一个build.gradle文件的示例,该文件用于以前的HelloWorld主类的同一个简单Java项目:

apply plugin: 'java'
repositories {
    mavenCentral()
jar {
    baseName = 'gradleExample'
    version = '0.0.1-SNAPSHOT'
dependencies {
    compile 'junit:junit:4.12'

我们可以通过运行来编译代码:

gradle classes

Gradle的核心是故意提供非常少的功能。插件添加了所有有用的功能。在我们的示例中,我们使用java插件,它允许我们编译Java代码和其他有价值的功能。

Gradle将其构建步骤命名为“tasks”,而不是Ant的“目标”或Maven的“阶段”。使用Maven,我们使用了Apache Maven Dependency Plugin,它的特定目标是将依赖项复制到指定的目录。使用Gradle,我们可以通过使用任务来做同样的事情:

task copyDependencies(type: Copy) {
   from configurations.compile
   into 'dependencies'

我们可以执行以下命令来运行此任务

gradle copyDependencies

在本文中,我们介绍了Ant,Maven和Gradle - 三种Java构建自动化工具。

毫不奇怪,Maven占据了当今构建工具市场的大部分。然而,Gradle在更复杂的代码库中得到了很好的采用,包括许多开源项目,如Spring。

参考原文: https://www.baeldung.com/ant-maven-gradle

1.简介在本文中,我们将探讨三个主要构建JVM生态系统的Java构建自动化工具–Ant,Maven和Gradle。我们将介绍它们中的每一个,并探讨Java构建自动化工具是如何演变的。2. Apache Ant最初,Make是除了自行开发的解决方案之外唯一的构建自动化工具。Make自1976年以来一直存在,因此,它在Java早期用于构建Java应用程序。但是,C程序中的许多约定都不适合Ja... MAVEN BOOK 写道 Apache AntAnt 没有正式的约定如一个一般项目的目录结构,你必须明确的告诉 Ant 哪里去找源代码,哪里放置输出。随着时间的推移,非正式的约定出现了,但是它们还没有在产品中模式化。 •Ant 是程序化的,你必须明确的告诉 Ant 做什么,什么时候做。你必须告诉它去编译,然后复制,然后压缩。 •Ant 没有生命周期,你必须定义目标和目标之间的依赖。你必...
Gradle&amp;amp;Maven&amp;amp;Ant 构建工具什么是Gradle?关于构建工具?关于Ant?关于Maven? 什么是Gradle? Gradle就是一个构建工具,一个自动化的构建工具,一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。 它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。 面向Java应用...
ANT是最早的构建工具,基于idea,好象是2000年有的,当时是最流行java构建工具,不过它的XML脚本编写格式让XML文件特别大。对工程构建过程中的过程控制特别好。 Maven它是用来给Ant补坑的,Maven第一次支持了从网络上下载的功能,仍然采用xml作为配置文件格式,它的问题是不能很好的相同库文件的版本冲突。Maven专注的是依赖管理,构建神马的并不擅长。 Grale是一个自动化的构建...
一、构建工具的作用 构建一个项目通常包含了依赖管理、测试、编译、打包、发布等流程,构建工具可以自动化进行这些操作,从而为我们减少这些繁琐的工作。 其中构建工具提供的依赖管理能够可以自动处理依赖关系。例如一个项目需要用到依赖 A,A 又依赖于 B,那么构建工具就能帮我们导入 B,而不需要我们手动去寻找并导入。 在 Java 项目中,打包流程通常是将项目打包成 Jar 包。在没有构建工具的情况下,我们需要 1.什么是构建工具? 在进行编程操作的时候,我们经常会遇到很多与编程无关的项目管理工作。如下载依赖、编译源码、单元测试、项目部署等操作。 一般的,小型项目我们可以手动实现这些操作,然而大型项目这些工作则相对复杂。所以我们需要用到构建工具构建工具是帮助我们实现一系列项目管理、测试和部署操作的工具构建工具可以把源代码生成可执行应用程序的过程自动化的程序(例如Android app生成apk)。 构建工具包括编译、连接跟把代码打包成可用的或可执行的形式。 总的来说构建的自动化是编写或使一大部
创世之初,世上只有Make一种构建工具,后来,其发展为GNU Make。但是,由于需求的不断涌现,码农的世界里逐渐演化出了千奇百怪的构建工具。 当前,JVM生态圈由三大构建工具所统治: Apache Ant带着IvyMavenGradel Ant with Ivy Ant是第一个“现代”构建工具,在很多方面它有些像Make。2000年发布,在很短时间内成为Java项目上最流行的构建工具
Java中的构建工具也算是历史悠久,在构建工具出现前,我们写一个Java程序,一般步骤是编译,测试,打包等。若文件比较少我们可以通过手动写java,javac,jar命令操作,但工程越来越大,文件越来越多,这样就会很麻烦了,于是就有了构建工具的出现。 一、Ant 更早之前,在linux上,有一个工具叫make。我们可以通过编写Makefile来执行工程的构建。windows上相应的工具是nmake。 从早期,Java的构建就没有选择它,而是新建了一个叫做ant工具ant的思想和makefile比较像。定
转载自:https://zhuanlan.zhihu.com/p/24429133?refer=hinus 在讲解基础知识的过程中,我们也要动手去写。而Java发展到现在,可以帮助我们写程序,构建,发布的工具有一大堆。今天就来讨论一下构建工具。在开始之前,我们先讲点别的。 如何学习琳琅满目的框架和工具 学Java的新人,最头疼的事情,莫过于工具太多,挑花了眼。不管你要做什么,几乎都要