Учебники

Ant — Строительные проекты

Теперь, когда мы узнали о типах данных в Ant, пришло время применить эти знания в действии. Мы будем строить проект в этой главе. Цель этой главы — создать файл Ant, который компилирует классы java и помещает их в папку WEB-INF \ classes.

Рассмотрим следующую структуру проекта —

  • Скрипты базы данных хранятся в папке db .

  • Исходный код Java хранится в папке src .

  • Изображения, js, META-INF, стили (css) хранятся в папке war .

  • JSP хранятся в папке jsp .

  • JAR-файлы сторонних производителей хранятся в папке lib .

  • Файлы классов Java хранятся в папке WEB-INF \ classes .

Скрипты базы данных хранятся в папке db .

Исходный код Java хранится в папке src .

Изображения, js, META-INF, стили (css) хранятся в папке war .

JSP хранятся в папке jsp .

JAR-файлы сторонних производителей хранятся в папке lib .

Файлы классов Java хранятся в папке WEB-INF \ classes .

Этот проект формирует приложение Hello World Fax для оставшейся части этого урока.

C:\work\FaxWebApplication>tree
Folder PATH listing
Volume serial number is 00740061 EC1C:ADB1
C:.
+---db
+---src
.  +---faxapp
.  +---dao
.  +---entity
.  +---util
.  +---web
+---war
   +---images
   +---js
   +---META-INF
   +---styles
   +---WEB-INF
      +---classes
      +---jsp
      +---lib

Вот build.xml, необходимый для этого проекта. Давайте рассмотрим это по частям.

<?xml version = "1.0"?>
<project name = "fax" basedir = "." default = "build">
   <property name = "src.dir" value = "src"/>
   <property name = "web.dir" value = "war"/>
   <property name = "build.dir" value = "${web.dir}/WEB-INF/classes"/>
   <property name = "name" value = "fax"/>

   <path id = "master-classpath">
      <fileset dir = "${web.dir}/WEB-INF/lib">
         <include name = "*.jar"/>
      </fileset>
      
      <pathelement path = "${build.dir}"/>
   </path>

   <target name = "build" description = "Compile source tree java files">
      <mkdir dir = "${build.dir}"/>
      
      <javac destdir = "${build.dir}" source = "1.5" target = "1.5">
         <src path = "${src.dir}"/>
         <classpath refid = "master-classpath"/>
      </javac>
   </target>
 
   <target name = "clean" description = "Clean output directories">
      <delete>
         <fileset dir = "${build.dir}">
            <include name = "**/*.class"/>
         </fileset>
      </delete>
   </target>
</project>

Во-первых, давайте объявим некоторые свойства для папок source, web и build.

<property name = "src.dir" value = "src"/>
<property name = "web.dir" value = "war"/>
<property name = "build.dir" value = "${web.dir}/WEB-INF/classes"/>

В этом примере —

  • src.dir ссылается на исходную папку проекта, где можно найти исходные файлы Java.

  • web.dir — это папка с исходным веб- сайтом проекта, в которой вы можете найти файлы JSP, web.xml, css, javascript и другие файлы, относящиеся к сети.

  • build.dir ссылается на выходную папку компиляции проекта.

src.dir ссылается на исходную папку проекта, где можно найти исходные файлы Java.

web.dir — это папка с исходным веб- сайтом проекта, в которой вы можете найти файлы JSP, web.xml, css, javascript и другие файлы, относящиеся к сети.

build.dir ссылается на выходную папку компиляции проекта.

Свойства могут ссылаться на другие свойства. Как показано в приведенном выше примере, свойство build.dir ссылается на свойство web.dir .

В этом примере src.dir ссылается на исходную папку проекта.

Целью по умолчанию нашего проекта является цель компиляции . Но сначала давайте посмотрим на чистую цель.

Чистая цель, как следует из названия, удаляет файлы в папке сборки.

<target name = "clean" description = "Clean output directories">
   <delete>
      <fileset dir = "${build.dir}">
         <include name = "**/*.class"/>
      </fileset>
   </delete>
</target>

Мастер-путь к классам содержит информацию о пути к классам. В этом случае он включает в себя классы в папке сборки и файлы jar в папке lib.

<path id = "master-classpath">
   <fileset dir = "${web.dir}/WEB-INF/lib">
      <include name = "*.jar"/>
   </fileset>
   
   <pathelement path = "${build.dir}"/>
</path>

Наконец, цель сборки для сборки файлов. Прежде всего, мы создаем каталог сборки, если он не существует. Затем мы выполняем команду javac (определяя jdk1.5 в качестве нашей целевой компиляции). Мы поставляем исходную папку и путь к классам для задачи javac и просим ее удалить файлы классов в папке сборки.

<target name = "build" description = "Compile main source tree java files">
   <mkdir dir = "${build.dir}"/>
   
   <javac destdir = "${build.dir}" source = "1.5" target = "1.5" debug = "true"
      deprecation = "false" optimize = "false" failonerror = "true">
      <src path = "${src.dir}"/>
      <classpath refid = "master-classpath"/>
   </javac>
</target>

Выполнение Ant для этого файла компилирует исходные файлы java и помещает классы в папку сборки.

Следующий результат является результатом запуска файла Ant —

C:\>ant
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 6.3 seconds

Файлы скомпилированы и помещены в папку build.dir .