您当前的位置: 首页 >  Java

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Apache Ant:2:使用Ant进行Java应用构建

发布时间:2019-12-11 20:12:30 ,浏览量:0

在这里插入图片描述 这篇文章通过一个具体的例子,来介绍一个最简单的Java应用如何使用Ant打包成jar文件。

事前准备
liumiaocn:ant liumiao$ java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
liumiaocn:ant liumiao$ 
liumiaocn:ant liumiao$ ant -version
Apache Ant(TM) version 1.10.7 compiled on September 1 2019
liumiaocn:ant liumiao$

Apache Ant相关的概要介绍和安装方法可参看: *

示例程序

这里准备一个HelloWorld的Java文件,具体如下所示:

liumiaocn:ant liumiao$ cat HelloWorld.java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World, LiuMiao"); } } liumiaocn:ant liumiao$
build.xml

Ant的缺省配置文件名称为build.xml,本文示例使用的build.xml如下所示:

liumiaocn:ant liumiao$ cat build.xml 
liumiaocn:ant liumiao$

配置内容说明:

  • Ant中没有像Maven那样约定的阶段,比如compile、test等,但是可以通过target定义任何希望的过程和阶段,比如上述示例定义了build和clean两个target
  • 在Gradle和Maven中通过插件方式实现的功能,在Ant中也可以通过target的定义来实现,比如上述示例中创建的名为jar的target
  • 各个target之间通过depends来确立依赖关系,比如创建jar文件的target依赖于名为build的target,因为jar文件生成之前必须要有从Java源码编译的Class文件,而名称为build的target完成的就是这一内容。
  • 诸如maven clean等这样指定的约定名称,在Ant中反而更为简单,就是一个普通的target的name,比如上述配置文件定义了三个target,分别名为clean、build、jar,可以通过ant clean、ant build、ant jar来分别调用。
  • build的target中设定了includeAntRuntime为false,否则会提示warning信息
执行ant命令进行构建 常见使用方式

ant命令的执行和mvn非常类似,比如本文的示例中,可以使用如下方式进行构建:

构建方式1: ant jar 说明:此种方式直接会使用build.xml作为构建配置文件,执行配置文件中名为jar的target,由于target依赖于build,所以会执行build之后再执行jar。

构建方式2: ant -f build.xml jar 说明:缺省名称为build.xml时可以省略-f build.xml,但是名称不是build.xml时则需要-f显示地进行指定

构建方式3: ant clean build jar 说明:ant也可以像mvn那样一次命令中执行多个执行的target

执行ant build进行构建

执行ant build可以将Java源码编译成Class文件

liumiaocn:ant liumiao$ ls
HelloWorld.java	build.xml
liumiaocn:ant liumiao$ ant build
Buildfile: /Users/liumiao/ant/build.xml

build:
    [mkdir] Created dir: /Users/liumiao/ant/classes
    [javac] Compiling 1 source file to /Users/liumiao/ant/classes

BUILD SUCCESSFUL
Total time: 0 seconds
liumiaocn:ant liumiao$ tree .
.
├── HelloWorld.java
├── build.xml
└── classes
    └── HelloWorld.class

1 directory, 3 files
liumiaocn:ant liumiao$
执行ant jar进行打包

执行ant jar可以将build生成的Class文件打包成jar文件,如果之前没有执行build,也会根据配置文件中的依赖关系先执行build进行构建,然后再执行jar的target进行打包。

liumiaocn:ant liumiao$ ant jar
Buildfile: /Users/liumiao/ant/build.xml

build:

jar:
      [jar] Building jar: /Users/liumiao/ant/hello.jar

BUILD SUCCESSFUL
Total time: 0 seconds
liumiaocn:ant liumiao$ tree .
.
├── HelloWorld.java
├── build.xml
├── classes
│   └── HelloWorld.class
└── hello.jar

1 directory, 4 files
liumiaocn:ant liumiao$

可以使用java -jar直接确认执行的结果

liumiaocn:ant liumiao$ java -jar hello.jar 
Hello World, LiuMiao
liumiaocn:ant liumiao$
执行ant clean删除构建生成的文件
liumiaocn:ant liumiao$ ls
HelloWorld.java	build.xml	classes		hello.jar
liumiaocn:ant liumiao$ ant clean
Buildfile: /Users/liumiao/ant/build.xml

clean:
   [delete] Deleting directory /Users/liumiao/ant/classes
   [delete] Deleting: /Users/liumiao/ant/hello.jar

BUILD SUCCESSFUL
Total time: 0 seconds
liumiaocn:ant liumiao$ ls
HelloWorld.java	build.xml
liumiaocn:ant liumiao$
常见问题
  • 现象:出现includeantruntime未设定的警告信息

[javac] /Users/liumiao/ant/build.xml:11: warning: ‘includeantruntime’ was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

  • 原因:需要设定includeantruntime

官方说明:Whether to include the Ant run-time libraries in the classpath; defaults to yes, unless build.sysclasspath is set. It is usually best to set this to false so the script’s behavior is not sensitive to the environment in which it is run.

  • 对应方法:按照官方建议,将includeantruntime设定为false
关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.3622s