<?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>
  <extend>${basedir}/../tag-project.xml</extend>
  <artifactId>commons-jelly-tags-jmx</artifactId>
  <name>commons-jelly-tags-jmx</name>
  <currentVersion>1.0.1-SNAPSHOT</currentVersion>

  <package>org.apache.commons.jelly.tags.jmx</package>

  <description>
       The Jelly JMX Tag Library is a Jelly library for instantiating and
       configuring Java Beans and MBeans and registering them with a 
       JMX Server in a similar way to the Ant tasks in Apache Commons Modeler.
  </description>
  
  <shortDescription>Commons Jelly JMX Tag Library</shortDescription>
  
  <versions>
    <version>
      <id>1.0</id>
      <name>1.0</name>
      <tag>COMMONS-JELLY-JMX-1_0</tag>
    </version>
  </versions>

<dependencies>

    <!-- START for compilation -->
    <dependency>
      <groupId>commons-jelly</groupId>
      <artifactId>commons-jelly-tags-bean</artifactId>
      <version>1.0</version>
      <url>http://commons.apache.org/jelly/tags/bean/</url>
    </dependency>
      
    <dependency>
      <groupId>mx4j</groupId>
      <artifactId>mx4j-jmx</artifactId>
      <version>1.1.1</version>
      <properties>
        <gump.project>mx4j</gump.project>
        <gump.id>mx4j-jmx</gump.id>
      </properties>
    </dependency>
      
    <!-- END for compilation -->
    
    <!-- START for test-->
  
    <dependency>
      <groupId>commons-jelly</groupId>
      <artifactId>commons-jelly-tags-log</artifactId>
      <version>1.0</version>
      <url>http://commons.apache.org/jelly/tags/log/</url>
      <properties>
        <scope>test</scope>
      </properties>
    </dependency>
      
    <dependency>
      <groupId>commons-jelly</groupId>
      <artifactId>commons-jelly-tags-junit</artifactId>
      <version>1.0</version>
      <url>http://commons.apache.org/jelly/tags/junit/</url>
      <properties>
        <scope>test</scope>
      </properties>
    </dependency>

    <dependency>
      <groupId>mx4j</groupId>
      <artifactId>mx4j-tools</artifactId>
      <version>1.1.1</version>
      <properties>
        <scope>test</scope>
      </properties>
    </dependency>
    
    <dependency>
      <groupId>commons-cli</groupId>
      <artifactId>commons-cli</artifactId>
      <version>1.0</version>
      <properties>
        <scope>test</scope>
      </properties>
    </dependency>
      
    <!-- END for test -->

  </dependencies>
  
</project>
