Хорошо, разберу build.xml от силентиумов, которые я когда-то пилил (я уже даже не помню, что там делал :redlol
Код:
<?xml version="1.0" encoding="UTF-8"?>
<project name="Silentium" default="dist" basedir=".">
<property name="src" location="java"/>
<property name="lib" location="lib"/>
<property name="build" location="build-ant"/>
<property name="build.classes" location="${build}/classes"/>
<property name="build.dist" location="${build}/dist"/>
<property name="build.dist.auth" location="${build.dist}/authserver"/>
<property name="build.dist.game" location="${build.dist}/gameserver"/>
<path id="classpath">
<fileset dir="${lib}">
<include name="*.jar"/>
</fileset>
</path>
<pathconvert property="manifest.libs" pathsep=" ">
<path refid="classpath"/>
<mapper>
<chainedmapper>
<flattenmapper />
<globmapper from="*.jar" to="../libs/*.jar"/>
</chainedmapper>
</mapper>
</pathconvert>
<target name="init" depends="clean,checkRequirements" description="Create the output directories.">
<mkdir dir="${build}"/>
<mkdir dir="${build.classes}"/>
<mkdir dir="${build.dist}"/>
<mkdir dir="${build.dist.auth}"/>
<mkdir dir="${build.dist.game}"/>
</target>
<target name="compile" depends="init" description="Compile the source.">
<javac srcdir="${src}" classpathref="classpath" destdir="${build.classes}" compiler="javac1.7" debug="true" debuglevel="lines,vars,source" includeantruntime="false" source="1.7" target="1.7"/>
</target>
<target name="jar" depends="compile" description="Create the jar file.">
<jar destfile="${build}/silentium-main.jar">
<fileset dir="${build.classes}"/>
<manifest>
<attribute name="Main-Class" value="silentium.commons.Server"/>
<attribute name="Class-Path" value="${manifest.libs}"/>
</manifest>
</jar>
<copy todir="${build.dist.auth}/libs">
<fileset dir="${build}">
<include name="*.jar"/>
</fileset>
</copy>
<copy todir="${build.dist.game}/libs">
<fileset dir="${build}">
<include name="*.jar"/>
</fileset>
</copy>
</target>
<target name="dist" depends="jar">
<copy todir="${build.dist.auth}/libs">
<fileset dir="${src}/../lib">
<include name="*.jar"/>
</fileset>
</copy>
<copy todir="${build.dist.game}/libs">
<fileset dir="${src}/../lib">
<include name="*.jar"/>
</fileset>
</copy>
<copy todir="${build.dist.auth}">
<fileset dir="dist">
<include name="AuthServer_loop.sh"/>
<include name="AuthServer.*"/>
</fileset>
</copy>
<copy todir="${build.dist.game}">
<fileset dir="dist">
<include name="GameServer_loop.sh"/>
<include name="GameServer.*"/>
</fileset>
</copy>
<fixcrlf srcdir="${build.dist.game}" eol="lf" eof="remove" includes="**/*.sh"/>
<fixcrlf srcdir="${build.dist.auth}" eol="lf" eof="remove" includes="**/*.sh"/>
<fixcrlf srcdir="${build.dist.game}" eol="crlf" eof="remove" includes="**/*.bat"/>
<fixcrlf srcdir="${build.dist.auth}" eol="crlf" eof="remove" includes="**/*.bat"/>
<mkdir dir="${build.dist.game}/log"/>
<mkdir dir="${build.dist.auth}/log"/>
<mkdir dir="${build.dist.game}/config"/>
<mkdir dir="${build.dist.auth}/config"/>
<copy todir="${build.dist.game}/config">
<fileset dir="config/game"/>
</copy>
<copy todir="${build.dist.auth}/config">
<fileset dir="config/auth"/>
</copy>
<mkdir dir="${build.dist.game}/data"/>
<copy todir="${build.dist.game}/data">
<fileset dir="data"/>
</copy>
<mkdir dir="${build.dist}/tools"/>
<copy todir="${build.dist}/tools">
<fileset dir="tools"/>
</copy>
</target>
<target name="clean" description="Remove the output directories.">
<delete dir="${build}"/>
</target>
<target name="checkRequirements" description="Check requirements.">
<echo>Verification of your JDK version.</echo>
<available classname="java.lang.AutoCloseable" property="JDK7.present"/>
<fail unless="JDK7.present" message="Java 1.7 is required, but your version is Java ${ant.java.version}. Install latest JDK."/>
</target>
</project>
Изначально сборка делится на 2 вещи: датапак и исходники. Build.xml собирает это все воедино и зависит сугубо от того какая сборка используется.
Хранится Build.xml в корне исходников.
Используемые теги:
property - параметр, указывается обычно в начале, как пример: <property name="src" location="java"/> - папка java
target - параметр, приводящий к результату т.е. какому-то действию, будь то очистка папки или же компиляция, имеет name (название) и depends (зависимость, название другого target).
Собственно разобраться можно легко в примере выше и написать свое....