<?xml version="1.0"?>
<!--
   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.
-->
<rdf:RDF xmlns="http://usefulinc.com/ns/doap#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:asfext="http://projects.apache.org/ns/asfext#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:doap="http://usefulinc.com/ns/doap#" xml:lang="en">
  <Project rdf:about="http://commons.apache.org/jci/">
    <name>Apache Commons JCI</name>
    <homepage rdf:resource="http://commons.apache.org/jci/"/>
    <programming-language>Java</programming-language>
    <category rdf:resource="http://projects.apache.org/category/library"/>
    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20"/>
    <bug-database rdf:resource="http://issues.apache.org/jira/browse/JCI"/>
    <download-page rdf:resource="http://commons.apache.org/jci/download_jci.cgi"/>
    <asfext:pmc rdf:resource="http://commons.apache.org/"/>
    <shortdesc xml:lang="en">Commons JCI</shortdesc>
    <description xml:lang="en">
        Commons-JCI provides a unified interface to any of several Java compilers.
  </description>
    <repository>
      <SVNRepository>
        <browse rdf:resource="http://svn.apache.org/repos/asf/commons/proper/jci/trunk"/>
        <location rdf:resource="http://svn.apache.org/repos/asf/commons/proper/jci"/>
      </SVNRepository>
    </repository>
    <release>
      <Version>
        <name>commons-jci</name>
        <created>2007-06-18</created>
        <revision>1.2</revision>
      </Version>
    </release>
    <mailing-list rdf:resource="http://commons.apache.org/mail-lists.html"/>
  </Project>
</rdf:RDF>
