<?xml version="1.0"?>
<project>

    <import file="get-dependency.xml" />
    <import file="log-level.xml" />

    <!-- # Maven supports -->
    <!--suppress ES6ConvertVarToLetConst, JSUnresolvedVariable, JSUnresolvedFunction -->
    <script language="javascript" taskname="mvn-init">(function () {
        // 兼容 rhino: https://stackoverflow.com/questions/650377/javascript-rhino-use-library-or-include-other-scripts/7125807#7125807
        function load(file) {
            var r = new java.io.InputStreamReader(new java.io.FileInputStream(file), 'utf8');
            return eval('' + org.apache.tools.ant.util.FileUtils.readFully(r));
        }

        var C = load(new java.io.File(new java.io.File(project.getProperty('ant.file.get-dependency')).parent, '../lib/_consts.js'));

        project.setProperty('maven.home', C.MAVEN_HOME);
        project.setProperty('maven-repository-url', C.MAVEN_URL);
    })();</script>

    <property name="maven.settingsFile" location="${ant.file.get-dependency}/../../maven/settings.xml" />
    <property name="maven.home" value="" /><!-- load in _consts.js -->
    <property name="maven-repository-url" value="" /><!-- load in _consts.js -->
    <property name="maven-local-repository" value="${user.home}/.m2/repository" />
    <property environment="env" />
    <property name="env.MAVEN_OPTS" value="" />
    <property name="env.MAVEN_CLI_OPTS" value="--batch-mode" />

    <sequential>
        <property name="maven-ant-task.version" value="2.1.3" />
        <get-dependency
            url="${maven-repository-url}/org/apache/maven/maven-ant-tasks/${maven-ant-task.version}/maven-ant-tasks-${maven-ant-task.version}.jar"
            destdir="${repos.dir}/maven-ant/${maven-ant-task.version}" />
        <!-- patch super pom to workaround central repo policy change problem (http access forbidden) -->
        <quiet>
            <unzip src="${repos.dir}/maven-ant/${maven-ant-task.version}/maven-ant-tasks-${maven-ant-task.version}.jar"
                   dest="${ant.file.get-dependency}/../../maven/target/workaround-central-repo-https">
                <patternset includes="**/pom-4.0.0.xml" />
            </unzip>
            <!--suppress HttpUrlsUsage -->
            <replace dir="${ant.file.get-dependency}/../../maven/target/workaround-central-repo-https" encoding="utf8"
                     token="http://repo1.maven.org/maven2" value="https://repo1.maven.org/maven2" />
        </quiet>
        <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="antlib:org.apache.maven.artifact.ant">
            <classpath path="${ant.file.get-dependency}/../../maven/target/workaround-central-repo-https" />
            <classpath path="${repos.dir}/maven-ant/${maven-ant-task.version}/maven-ant-tasks-${maven-ant-task.version}.jar" />
        </typedef>
    </sequential>

    <macrodef name="mvn">
        <attribute name="pomFile" />
        <attribute name="multiModuleProjectDirectory" default="" />
        <attribute name="goal" />
        <attribute name="options" default="" />
        <attribute name="failonerror" default="yes" />
        <element name="args" implicit="true" optional="true" />
        <sequential>
            <artifact:mvn pom="@{pomFile}" mavenHome="${maven.home}" fork="yes" failonerror="@{failonerror}"
                 xmlns:artifact="antlib:org.apache.maven.artifact.ant">
                <artifact:jvmarg line="${env.MAVEN_OPTS}" />
                <artifact:jvmarg value="-&#x44;maven.multiModuleProjectDirectory=@{multiModuleProjectDirectory}" />
                <artifact:arg line="${env.MAVEN_CLI_OPTS} @{options} @{goal}" />
            </artifact:mvn>
        </sequential>
    </macrodef>

    <!--
        There are many problems in maven-resolver-ant-tasks
        See https://issues.apache.org/jira/browse/MRESOLVER-98
        So we wrote a custom task that execute the actual maven dependency:resolve command to collect paths
    -->
    <sequential>
        <!--
        <mvn goal="compile" pomFile="${ant.file.get-dependency}/../../maven/pom.xml" />
        -->
        <mkdir dir="${ant.file.get-dependency}/../../maven/resolver/target/classes" />
        <copy todir="${ant.file.get-dependency}/../../maven/resolver/target/classes">
            <fileset dir="${ant.file.get-dependency}/../../maven/resolver/resources" />
        </copy>
        <javac srcdir="${ant.file.get-dependency}/../../maven/resolver/src"
               destdir="${ant.file.get-dependency}/../../maven/resolver/target/classes"
               source="1.8" target="1.8"
               includeantruntime="true" encoding="UTF8" debug="true" deprecation="off" optimize="yes" fork="yes">
            <compilerarg line="-Xlint:all,-options,-path" />
        </javac>
    </sequential>

    <taskdef name="resolve" classname="cn.mailtech.maven.resolver.ant.tasks.Resolve"
             classpath="${ant.file.get-dependency}/../../maven/resolver/target/classes">
        <!-- workaround IntelliJ IDEA issue: taskdef path not recognized correctly -->
        <classpath>
            <fileset file="${ant.file.get-dependency}/../../maven/resolver/target/classes" />
        </classpath>
    </taskdef>
</project>
