<?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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-parent</artifactId>
        <version>13</version>
    </parent>
    <packaging>pom</packaging>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-jci</artifactId>
    <version>1.1-SNAPSHOT</version>
    <name>Commons JCI</name>
    <description>
        Commons JCI is a java compiler interface. It can be used to either compile java (or any other language that can be compiled to java classes like e.g. groovy or javascript) to java. It is well integrated with a FAM (FilesystemAlterationMonitor) that can be used with the JCI compiling/reloading classloader. All the currently supported compilers (even javac before java6) feature in-memory compilation.
    </description>
    <url>http://commons.apache.org/jci/</url>
    <inceptionYear>2004</inceptionYear>
    <issueManagement>
        <system>JIRA</system>
        <url>https://issues.apache.org/jira/browse/JCI</url>
    </issueManagement>
    <modules>
        <module>core</module>
        <module>fam</module>
        <module>compilers/eclipse</module>
        <module>compilers/janino</module>
        <module>compilers/groovy</module>
        <module>compilers/javac</module>
        <module>compilers/rhino</module>
        <module>examples</module>
    </modules>
    <distributionManagement>
        <site>
            <id>website</id>
            <url>scpexe://people.apache.org/www/commons.apache.org/jci/</url>
        </site>
    </distributionManagement>
    <developers>
        <developer>
            <id>tcurdt</id>
            <name>Torsten Curdt</name>
            <email>tcurdt at apache.org</email>
            <organization>ASF</organization>
            <organizationUrl>http://www.apache.org/</organizationUrl>
            <timezone>+1</timezone>
        </developer>
    </developers>
    <contributors>
        <contributor>
            <name>Don Brown</name>
            <email>mrdon at apache.org</email>
            <organization>ASF</organization>
            <organizationUrl>http://www.apache.org/</organizationUrl>
        </contributor>
        <contributor>
            <name>Joerk Heinicke</name>
            <email>joerg.heinicke at gmx.de</email>
        </contributor>
        <contributor>
            <name>Mark Proctor</name>
            <email>mproctor at codehaus.org</email>
        </contributor>
    </contributors>
    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/commons/proper/jci/trunk/</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/commons/proper/jci/trunk/</developerConnection>
        <url>http://svn.apache.org/viewvc/commons/proper/jci/trunk/</url>
    </scm>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <systemProperties>
                        <property>
                            <name>org.apache.commons.logging.Log</name>
                            <value>org.apache.commons.logging.impl.SimpleLog</value>
                        </property>
                    </systemProperties>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>2.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptors>
                        <descriptor>src/assembly/bin.xml</descriptor>
                        <descriptor>src/assembly/src.xml</descriptor>
                    </descriptors>
                    <tarLongFileMode>gnu</tarLongFileMode>
                </configuration>
            </plugin>
        </plugins>
        <extensions>
            <extension>
                <groupId>org.apache.maven.wagon</groupId>
                <artifactId>wagon-ssh-external</artifactId>
                <version>1.0-beta-2</version>
            </extension>
        </extensions>
    </build>
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>1.2</version>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>taglist-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <tags>
                        <tag>TODO</tag>
                        <tag>@todo</tag>
                        <tag>FIXME</tag>
                        <tag>@deprecated</tag>
                    </tags>
                    <aggregate>true</aggregate>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
                <version>2.4.3</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <aggregate>true</aggregate>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jxr-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <aggregate>true</aggregate>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <aggregate>true</aggregate>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>2.0.1</version>
                <inherited>false</inherited>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>project-team</report>
                            <report>mailing-list</report>
                            <report>dependencies</report>
                            <report>issue-tracking</report>
                            <report>license</report>
                            <report>scm</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
    </reporting>
    <profiles>
        <profile>
            <id>release</id>
            <distributionManagement>
                <repository>
                    <id>apache.staging</id>
                    <name>Apache Release Staging Repository</name>
                    <url>${commons.deployment.protocol}://people.apache.org/www/people.apache.org/builds/commons/jci/${release.tag}/</url>
                </repository>
            </distributionManagement>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-source-plugin</artifactId>
                            <version>2.0.3</version>
                        </plugin>
                    </plugins>
                </pluginManagement>
                <plugins>
                    <plugin>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>1.0-alpha-3</version>
                        <configuration>
                            <useAgent>true</useAgent>
                        </configuration>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-source-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-source-jar</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-javadoc-jar</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                                <configuration>
                                    <source>${maven.compile.source}</source>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-release-plugin</artifactId>
                        <version>2.0-beta-4</version>
                        <configuration>
                            <generateReleasePoms>true</generateReleasePoms>
                            <preparationGoals>clean install</preparationGoals>
                            <autoVersionSubmodules>true</autoVersionSubmodules>
                            <tag>${release.tag}</tag>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
    <properties>
        <gpg.useAgent>true</gpg.useAgent>
        <maven.compile.source>1.4</maven.compile.source>
        <maven.compile.target>1.4</maven.compile.target>
        <commons.componentid>jci</commons.componentid>
        <commons.release.version>1.0</commons.release.version>
        <commons.jira.id>JCI</commons.jira.id>
        <commons.jira.pid>12310650</commons.jira.pid>
        <commons.deployment.protocol>scpexe</commons.deployment.protocol>
        <release.tag>1.1-RC1</release.tag>
    </properties>
</project>
