<!--
 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 default="all">
    <target name="clean">
        <exec executable="mvn" failonerror="true">
            <arg line="-Dpackaging=bundle clean" />
        </exec>
        <exec executable="mvn" failonerror="true">
            <arg line="-Dpackaging=osgi-bundle clean" />
        </exec>
        <exec executable="mvn" failonerror="true">
            <arg line="-Dpackaging=ipojo-bundle clean" />
        </exec>
        <exec executable="mvn" failonerror="true">
            <arg line="-Dpackaging=osgi-bundle-mosgi clean" />
        </exec>
    </target>
    <target name="install">
        <exec executable="mvn" failonerror="true">
            <arg line="-Dpackaging=bundle install" />
        </exec>
        <exec executable="mvn" failonerror="true">
            <arg line="-Dpackaging=osgi-bundle install" />
        </exec>
        <exec executable="mvn" failonerror="true">
            <arg line="-Dpackaging=ipojo-bundle install" />
        </exec>
        <exec executable="mvn" failonerror="true">
            <arg line="-Dpackaging=osgi-bundle-mosgi install" />
        </exec>
    </target>
    <target name="all">
        <exec executable="mvn" failonerror="true">
            <arg line="-Dpackaging=bundle clean install" />
        </exec>
        <exec executable="mvn" failonerror="true">
            <arg line="-Dpackaging=osgi-bundle clean install" />
        </exec>
        <exec executable="mvn" failonerror="true">
            <arg line="-Dpackaging=ipojo-bundle clean install" />
        </exec>
        <exec executable="mvn" failonerror="true">
            <arg line="-Dpackaging=osgi-bundle-mosgi clean install" />
        </exec>
    </target>
</project>
