<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->

<project basedir="." default="build" name="java/maven">
    <description>Builds, tests, and runs the project org.netbeans.modules.maven</description>
    <import file="../../nbbuild/templates/projectized.xml"/>
    
    <target name="nblib" depends="init">
        <mkdir dir="build/mavenclasses"/>
        <property name="maven.embedder.dir" value="${maven.dir}"/>
        <javac srcdir="mavensrc" destdir="build/mavenclasses" 
            debug="${build.compiler.debug}" 
            deprecation="${build.compiler.deprecation}" 
            source="1.7"
            target="1.7"
            includeantruntime="false">
            <classpath>
                <fileset dir="${maven.embedder.dir}/maven/lib">
                    <include name="*.jar"/>
                </fileset>
                <fileset dir="${maven.embedder.dir}/maven/boot">
                    <include name="*.jar"/>
                </fileset>
                <pathelement location="./external/aether-api-1.13.1.jar"/>
            </classpath>
            <classpath refid="cp"/>
        </javac>
        <copy overwrite="true" tofile="build/mavenclasses/META-INF/plexus/components.xml" file="mavensrc/org/netbeans/modules/maven/workspace/reader/components.xml">
        </copy>
        <mkdir dir="${cluster}/maven-nblib"/>
        <jar jarfile="${cluster}/maven-nblib/netbeans-cos.jar" compress="false">
            <fileset dir="build/mavenclasses" >
                <include name="org/netbeans/modules/maven/workspace/reader/**"/>
                <include name="META-INF/plexus/**"/>
            </fileset>
        </jar>
        <copy overwrite="true" tofile="build/mavenclasses/META-INF/plexus/components.xml" file="mavensrc/org/netbeans/modules/maven/event/components.xml"/>
        <!-- we use jarjar to repackage simple json, to avoid clashes with 3rd party maven plugins possibly including it in their dependencies -->
        <taskdef name="jarjar" classpath="./external/jarjar-1.5.jar" classname="org.pantsbuild.jarjar.JarJarTask" loaderref="lib.path.loader"/>
        <jarjar jarfile="${cluster}/maven-nblib/netbeans-eventspy.jar" compress="false">
            <fileset dir="build/mavenclasses" >
                <include name="org/netbeans/modules/maven/event/**"/>
                <include name="META-INF/plexus/**"/>
            </fileset>
            <zipfileset src="../../ide/libs.json_simple/external/json-simple-1.1.1.jar"/>
            <rule pattern="org.json.**" result="org.netbeans.shaded.json.@1"/>
        </jarjar>
    </target>

    <target name="netbeans-extra" depends="nblib"/>    



    <target name="do-unit-test-build" depends="projectized.do-unit-test-build">
        <macrodef name="package-artifact-from-dir">
             <attribute name="jarbasename"/>
             <attribute name="relpath"/>
             <sequential>
                 <jar destfile="${build.test.unit.dir}/data/@{relpath}/@{jarbasename}.jar">
                     <fileset dir="${build.test.unit.dir}/data/@{relpath}/@{jarbasename}.jardir" includes="**"/>
                 </jar>
             </sequential>
         </macrodef>
         
         <package-artifact-from-dir jarbasename="annotation-12.6" relpath="projects/processors/repo/grp/annotation/12.6"/>
         <package-artifact-from-dir jarbasename="test-lib-12.6" relpath="projects/processors/repo/grp/test-lib/12.6"/>
         <package-artifact-from-dir jarbasename="test-lib2-12.6" relpath="projects/processors/repo/grp/test-lib2/12.6"/>
         <package-artifact-from-dir jarbasename="test-lib3-12.6" relpath="projects/processors/repo/grp/test-lib3/12.6"/>
         <package-artifact-from-dir jarbasename="test-lib4-12.6" relpath="projects/processors/repo/grp/test-lib4/12.6"/>
         <package-artifact-from-dir jarbasename="test-processor-12.6" relpath="projects/processors/repo/grp/test-processor/12.6"/>
    </target>

</project>
