summaryrefslogtreecommitdiff
path: root/build.xml
diff options
context:
space:
mode:
Diffstat (limited to 'build.xml')
-rw-r--r--build.xml265
1 files changed, 265 insertions, 0 deletions
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..f5d65bc
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,265 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project
+ name="mai"
+ default="build"
+ basedir="."
+ xmlns:ivy="antlib:org.apache.ivy.ant">
+
+ <!-- Project -->
+ <property name="src.dir" value="${basedir}/src"/>
+ <property name="test.dir" value="${basedir}/test"/>
+
+ <property name="build.dir" value="${basedir}/build"/>
+ <property name="classes.dir" value="${build.dir}/classes"/>
+ <property name="test.classes.dir" value="${build.dir}/test-classes"/>
+ <property name="test.results.dir" value="${build.dir}/test-results"/>
+ <property name="dist.dir" value="${build.dir}/dist"/>
+ <property name="deps.dir" value="${build.dir}/deps"/>
+
+ <!-- Bootstrap tools -->
+ <property name="tools.dir" value="${basedir}/.tools"/>
+
+ <!-- Java -->
+ <property name="java.release" value="25"/>
+
+ <!-- Ivy -->
+ <property name="ivy.version" value="2.6.0"/>
+ <property
+ name="ivy.jar"
+ value="${tools.dir}/ivy-${ivy.version}.jar"/>
+
+ <property
+ name="ivy.url"
+ value="https://repo.maven.apache.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar"/>
+
+ <!-- Application -->
+ <property name="main.class" value="moe.anita.mai.Main"/>
+ <property name="jar.file" value="${dist.dir}/mai.jar"/>
+
+ <!-- Ivy bootstrap -->
+
+ <target name="check-ivy">
+ <available
+ file="${ivy.jar}"
+ property="ivy.available"/>
+ </target>
+
+ <target
+ name="download-ivy"
+ depends="check-ivy"
+ unless="ivy.available">
+
+ <mkdir dir="${tools.dir}"/>
+
+ <echo message="Downloading Apache Ivy ${ivy.version}..."/>
+
+ <get
+ src="${ivy.url}"
+ dest="${ivy.jar}"
+ usetimestamp="true"/>
+ </target>
+
+ <target name="bootstrap-ivy" depends="download-ivy">
+ <taskdef
+ resource="org/apache/ivy/ant/antlib.xml"
+ uri="antlib:org.apache.ivy.ant"
+ classpath="${ivy.jar}"/>
+ </target>
+
+ <!-- Initialization -->
+
+ <target name="init">
+ <mkdir dir="${classes.dir}"/>
+ <mkdir dir="${test.classes.dir}"/>
+ <mkdir dir="${test.results.dir}"/>
+ <mkdir dir="${dist.dir}"/>
+ <mkdir dir="${deps.dir}"/>
+ </target>
+
+ <!-- Dependencies -->
+
+ <target name="resolve" depends="init,bootstrap-ivy">
+ <ivy:resolve file="${basedir}/ivy.xml"/>
+
+ <ivy:retrieve
+ conf="test"
+ pattern="${deps.dir}/test/[artifact]-[revision].[ext]"/>
+ </target>
+
+ <path id="test.classpath">
+ <pathelement location="${classes.dir}"/>
+
+ <fileset dir="${deps.dir}/test">
+ <include name="*.jar"/>
+ </fileset>
+ </path>
+
+ <!-- Compile -->
+
+ <target name="compile" depends="init">
+ <javac
+ srcdir="${src.dir}"
+ destdir="${classes.dir}"
+ release="${java.release}"
+ encoding="UTF-8"
+ includeantruntime="false"
+ debug="true"/>
+ </target>
+
+ <target name="compile-test" depends="compile,resolve">
+ <javac
+ srcdir="${test.dir}"
+ destdir="${test.classes.dir}"
+ release="${java.release}"
+ encoding="UTF-8"
+ includeantruntime="false"
+ debug="true">
+
+ <classpath refid="test.classpath"/>
+ </javac>
+ </target>
+
+ <!-- Tests -->
+
+ <target name="test" depends="compile-test">
+ <junitlauncher
+ haltOnFailure="true"
+ printSummary="true">
+
+ <classpath>
+ <pathelement location="${classes.dir}"/>
+ <pathelement location="${test.classes.dir}"/>
+
+ <fileset dir="${deps.dir}/test">
+ <include name="*.jar"/>
+ </fileset>
+ </classpath>
+
+ <testclasses outputdir="${test.results.dir}">
+ <fileset dir="${test.classes.dir}">
+ <include name="**/*Test.class"/>
+ </fileset>
+
+ <listener type="legacy-plain"/>
+ </testclasses>
+ </junitlauncher>
+ </target>
+
+ <!-- JAR -->
+
+ <target name="jar" depends="compile">
+ <jar destfile="${jar.file}">
+ <fileset dir="${classes.dir}"/>
+
+ <manifest>
+ <attribute
+ name="Main-Class"
+ value="${main.class}"/>
+
+ <attribute
+ name="Implementation-Title"
+ value="mai"/>
+ </manifest>
+ </jar>
+ </target>
+
+ <!-- Build -->
+
+ <target name="build" depends="jar">
+ <echo message="Built ${jar.file}"/>
+ </target>
+
+ <!-- Run -->
+
+ <target name="run" depends="compile">
+ <java
+ classname="${main.class}"
+ fork="true"
+ failonerror="true">
+
+ <classpath>
+ <pathelement location="${classes.dir}"/>
+ </classpath>
+ </java>
+ </target>
+
+ <!-- LSP / JDT LS -->
+
+ <target name="lsp" depends="resolve">
+ <echo message="Generating JDT LS project files..."/>
+
+ <echo file="${basedir}/.project"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>mai</name>
+ <comment></comment>
+ <projects></projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments></arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
+]]></echo>
+
+ <echo file="${basedir}/.classpath"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="test"/>
+ <classpathentry
+ kind="con"
+ path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+]]></echo>
+
+ <fileset id="lsp.dependencies" dir="${deps.dir}/test">
+ <include name="*.jar"/>
+ </fileset>
+
+ <pathconvert
+ property="lsp.dependency.entries"
+ refid="lsp.dependencies"
+ pathsep="&#10;">
+
+ <mapper>
+ <globmapper
+ from="${basedir}/*"
+ to=" &lt;classpathentry kind=&quot;lib&quot; path=&quot;*&quot;/&gt;"/>
+ </mapper>
+ </pathconvert>
+
+ <echo
+ file="${basedir}/.classpath"
+ append="true">${lsp.dependency.entries}
+</echo>
+
+ <echo file="${basedir}/.classpath" append="true"><![CDATA[
+ <classpathentry kind="output" path="build/classes"/>
+</classpath>
+]]></echo>
+
+ <echo message="Generated .project and .classpath"/>
+ </target>
+
+ <!-- Clean -->
+
+ <target name="clean">
+ <delete dir="${build.dir}"/>
+ </target>
+
+ <target name="clean-lsp">
+ <delete file="${basedir}/.project"/>
+ <delete file="${basedir}/.classpath"/>
+ <delete dir="${basedir}/.settings"/>
+ </target>
+
+ <target name="clean-all" depends="clean,clean-lsp">
+ <delete dir="${tools.dir}"/>
+ </target>
+
+ <target name="rebuild" depends="clean,build"/>
+
+</project>