Ant构建Java项目之第2篇

简介:
实例1:实现自定义Ant任务
  其中FileSorter文件的源码如下:
package com.ant.test02;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
public class FileSorter extends Task {
private File srcFile;
private File destFile;
public File getSrcFile() {
return srcFile;
}
public void setSrcFile(File srcFile) {
this.srcFile = srcFile;
}
public File getDestFile() {
return destFile;
}
public void setDestFile(File destFile) {
this.destFile = destFile;
}
@Override
public void execute() throws BuildException {
try {
BufferedReader fromFile = new BufferedReader(
new FileReader(srcFile));
BufferedWriter toFile = new BufferedWriter(new FileWriter(destFile));
List<String> list = new ArrayList<String>();
String line = fromFile.readLine();
while (line != null) {
list.add(line);
line = fromFile.readLine();
}
Collections.sort(list);
for (ListIterator<String> li = list.listIterator(); li.hasNext();) {
String str = li.next();
toFile.write(str);
toFile.newLine();
}
fromFile.close();
toFile.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
实现一个文件排序的功能。
  build.xml文件源码如下:
<?xml  version="1.0"?>
<project name="tasks" default="main">
<property name="build.dir" location="build" />
<target name="init">
<mkdir dir="${build.dir}" />
</target>
<target name="compile" depends="init">
<javac srcdir="src" destdir="${build.dir}" />
</target>
<target name="simpletask" depends="compile">
<taskdef name="simpletask" classname="com.ant.test02.FileSorter" classpath="${build.dir}" />
<simpletask srcFile="input.txt" destFile="output.txt"/>
</target>
<target name="clean">
<delete dir="${build.dir}" />
</target>
<target name="main" depends="simpletask" />
</project>
  input.txt中输入需要排序的内容后,运行build.xml。查看output.txt,发现内容进行了排序。
  实例2:模式匹配
  可以对目录执行模式匹配。例如,模式src*/*.java将匹配带src前缀的任何目录中的所有Java文件。
  还有另一种模式结构:**,它匹配任意数量的目录。例如,模式**/*.java将匹配当前目录结构下的所有Java文件。
<copy todir=”archive”>
<fileset dir=”src”>
<include name=”*.java”/>
</fileset>
</copy>
  fileset默认情况下包含指定src目录下的所有文件,因此为了仅选择Java文件,我们对模式使用一个include元素。类似地,我们可以对另一个模式添加一个exclude元素,从而潜在地排除include指定的匹配项。甚至可以指定多个include和exclude元素;这样将得到一组文件和目录,它们包含include模式的所有匹配项的并集,但排除了exclude模式的所有匹配项。
<?xml  version="1.0"?>
<project name="tasks" default="main">
<property name="build.dir" location="build" />
<target name="main" >
<copy todir="${build.dir}/dest_dir">
<!-- 只拷贝build目录下的文件,其子目录下的文件不做拷贝 -->
<fileset dir="${build.dir}">
<include name="*.class"/>
<exclude name="*.war"/>
</fileset>
</copy>
</target>
</project>
 实例3:可执行Jar文件的生成
  在com.ant.test03包下新建一个Testjar.java文件,源码如下:
package com.ant.test03;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
public class TestJar {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(new Dimension(200, 300));
frame.setBackground(new Color(200, 200, 200));
frame.setAlwaysOnTop(true);
frame.getContentPane().add(new JButton("Test Ant"));
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
  build.xml文件源码如下:
<?xml version="1.0" encoding="utf-8"?>
<project name="myAntProject" default="dist" basedir=".">
<property name="compile" value="compile" />
<property name="dist" value="dist" />
<target name="preprocess" >
<mkdir dir="${compile}" />
<mkdir dir="${dist}" />
</target>
<target name="myCompile" depends="preprocess">
<javac srcdir="src" destdir="${compile}">
</javac>
</target>
<target name="dist" depends="myCompile">
<jar destfile="${dist}/package.jar" basedir="${compile}">
<manifest>
<attribute name="Built-By" value="${user.name}" />
<attribute name="Main-Class" value="com.ant.test03.TestJar" />
</manifest>
</jar>
</target>
</project>
  运行后刷新MyEclipse项目,就可以看到在dist文件夹下生成的package.jar文件,双击可以运行。


最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
|
14天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
1天前
|
Java Android开发
Eclipse 创建 Java 项目
Eclipse 创建 Java 项目
13 4
|
7天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
18 3
|
9天前
|
前端开发 Java 数据库
如何实现一个项目,小白做项目-java
本教程涵盖了从数据库到AJAX的多个知识点,并详细介绍了项目实现过程,包括静态页面分析、数据库创建、项目结构搭建、JSP转换及各层代码编写。最后,通过通用分页和优化Servlet来提升代码质量。
25 1
|
1月前
|
JavaScript 前端开发 Java
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
这篇文章详细介绍了如何在前端Vue项目和后端Spring Boot项目中通过多种方式解决跨域问题。
323 1
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
|
15天前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
33 2
|
16天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
30天前
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
Java/Spring项目的包开头为什么是com?
|
1月前
|
运维 Java Maven
Dockerfile实践java项目
通过上述实践,我们可以看到,Dockerfile在Java项目中扮演着至关重要的角色,它不仅简化了部署流程,提高了环境一致性,还通过多阶段构建、环境变量配置、日志管理、健康检查等高级特性,进一步增强了应用的可维护性和可扩展性。掌握这些实践,将极大地提升开发和运维团队的工作效率。
43 1
|
XML Java 数据格式
Ant 系统命令、java工程部署
javac Ant的javac任务用于实现编译Java程序的功能。下面来看一个简单的例子: 首先我们建立名为antstudy的Java工程,建立src目录为源代码目录,在src目录下建立HelloWorld.java这个类文件。该类文件的内容如下: public class HelloWorld  {public static void main(String[] args)  
1257 0