<!--
   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>
  <groupId>org.apache.abdera</groupId>
  <artifactId>abdera</artifactId>
  <packaging>pom</packaging>
  <name>Apache Abdera</name>  
  <version>0.4.0-incubating</version>  
  <description>Atom Specification Implementation</description>
  <inceptionYear>2006</inceptionYear>
  <url>http://incubator.apache.org/abdera</url>
  
  <organization>
    <name>Apache Software Foundation</name>
    <url>http://www.apache.org/</url>
  </organization>
  
  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.apache.org/jira/browse/ABDERA</url>
  </issueManagement>
  
  <mailingLists>
    <mailingList>
     <name>Abdera Developer List</name>
     <subscribe>abdera-dev-subscribe@incubator.apache.org</subscribe>
     <unsubscribe>abdera-dev-unsubscribe@incubator.apache.org</unsubscribe>
     <post>abdera-dev@incubator.apache.org</post>
     <archive>http://mail-archives.apache.org/mod_mbox/incubator-abdera-dev/</archive>
   </mailingList>
   <mailingList>
     <name>Abdera User List</name>
     <subscribe>abdera-user-subscribe@incubator.apache.org</subscribe>
     <unsubscribe>abdera-user-unsubscribe@incubator.apache.org</unsubscribe>
     <post>abdera-user@incubator.apache.org</post>
     <archive>http://mail-archives.apache.org/mod_mbox/incubator-abdera-user/</archive>
   </mailingList>
   <mailingList>
     <name>Abdera Source Control List</name>
     <subscribe>abdera-commits-subscribe@incubator.apache.org</subscribe>
     <unsubscribe>abdera-commits-unsubscribe@incubator.apache.org</unsubscribe>
     <archive>http://mail-archives.apache.org/mod_mbox/incubator-abdera-commits/</archive>
   </mailingList>
  </mailingLists>
  
  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  
  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/abdera/java/tags/abdera-0.4.0-incubating</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/abdera/java/tags/abdera-0.4.0-incubating</developerConnection>
    <url>http://svn.apache.org/repos/asf/incubator/abdera/java/tags/abdera-0.4.0-incubating</url>
  </scm>
  
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <source>1.5</source>				
          <links>
            <link>http://java.sun.com/j2se/1.5.0/docs/api/</link>
          </links>
          <aggregate>true</aggregate>
          <excludePackageNames>org.apache.abdera.util,org.apache.abdera.ext.*.impl,org.apache.abdera.parser.**,org.apache.abdera.security.**</excludePackageNames>
        </configuration>
      </plugin>
      
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
        <configuration>
          <aggregate>true</aggregate>
        </configuration>
      </plugin>
      
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
      </plugin>
      
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </reporting>
  
  <build>
 
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.2</version>
          <configuration>
              <archive>
                  <manifestEntries>
                      <Specification-Title>${name}</Specification-Title>
                      <Specification-Vendor>The Apache Software Foundation</Specification-Vendor>
                      <Specification-Version>${version}</Specification-Version>
                      <Implementation-Title>${name}</Implementation-Title>
                      <Implementation-Vendor-Id>org.apache</Implementation-Vendor-Id>
                      <Implementation-Vendor>The Apache Software Foundation</Implementation-Vendor>
                      <Implementation-Version>${version}</Implementation-Version>
                  </manifestEntries>
               </archive>
          </configuration>
      </plugin>
      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <configuration>
              <tagBase>https://svn.apache.org/repos/asf/incubator/abdera/java/tags</tagBase>
              <useReleaseProfile>false</useReleaseProfile>
              <preparationGoals>clean install</preparationGoals>
              <goals>deploy</goals>
              <arguments>-Pdeploy</arguments>
              <autoVersionSubmodules>true</autoVersionSubmodules>
          </configuration>
      </plugin>
      <plugin>
          <artifactId>maven-remote-resources-plugin</artifactId>
          <version>1.0</version>
          <executions>
              <execution>
                  <id>compile</id>
                  <goals>
                      <goal>process</goal>
                  </goals>
                  <configuration>
                      <resourceBundles>
                          <resourceBundle>org.apache:apache-incubator-disclaimer-resource-bundle:1.1</resourceBundle>
                          <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
                      </resourceBundles>
                      <supplementalModels>
                          <supplementalModel>${topDir}/etc/notice-supplements.xml</supplementalModel>
                      </supplementalModels>
                      <properties>
                          <projectName>Apache Abdera</projectName>
                      </properties>
                  </configuration>
              </execution>
          </executions>
      </plugin>
      
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>clean</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-sources</id>
            <phase>verify</phase>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
            <excludes>
              <exclude>**/*TestSuite*</exclude>
              <exclude>**/*$*</exclude>
              <exclude>**/TestAdapter*</exclude>
            </excludes>
          </configuration>
        </plugin>
              <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-gpg-plugin</artifactId>
        <executions>
          <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
              <goal>sign</goal>
            </goals>
          </execution>
        </executions>
      </plugin> 
      </plugins>
    </pluginManagement>    
  </build>
  
  <profiles>
  	<profile>
  		<id>deploy</id>
  		<modules>
  			<module>distribution</module>
  		</modules>
  	</profile>
  	<profile>
  		<id>no-online-tests</id>
  		<activation>
  			<property>
  				<name>offline-tests</name>
  				<value>false</value>
  			</property>
  		</activation>
  		<build>
  			<plugins>
  				<plugin>
  					<artifactId>maven-surefire-plugin</artifactId>
  					<configuration>
  						<excludes>
  							<exclude>**/*TestSuite*</exclude>
  							<exclude>**/*$Test*</exclude>
  							<exclude>**/FeedValidatorTest.java</exclude>
  							<exclude>**/DSigThirdPartyVerifyTest.java</exclude>
  							<exclude>**/AtomConformanceTest.java</exclude>
  						</excludes>
  					</configuration>
  				</plugin>
  			</plugins>
  		</build>
  	</profile>
  </profiles>


  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.3</version>
        <scope>test</scope>
      </dependency>
      
      <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.0.4</version>
      </dependency>
      
      <dependency>
        <groupId>commons-httpclient</groupId>
        <artifactId>commons-httpclient</artifactId>
        <version>3.1-rc1</version>
      </dependency>
         
      <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.3</version>
      </dependency>
      
      <dependency>
        <groupId>org.apache.ws.commons.axiom</groupId>
        <artifactId>axiom-impl</artifactId>
        <version>1.2.5</version>

      <exclusions>
        <exclusion>
          <groupId>javax.mail</groupId>
          <artifactId>mail</artifactId>
        </exclusion>
        <exclusion>
          <groupId>stax</groupId>
          <artifactId>stax-api</artifactId>
        </exclusion>
      </exclusions>
      </dependency>
      
      <dependency>
        <groupId>org.codehaus.woodstox</groupId>
        <artifactId>wstx-asl</artifactId>
        <version>3.2.1</version>
        <scope>runtime</scope>	    
      <exclusions>
        <exclusion>
          <groupId>stax</groupId>
          <artifactId>stax-api</artifactId>
        </exclusion>
      </exclusions>
      </dependency>
      
      <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-activation_1.0.2_spec</artifactId>
        <version>1.1</version>
      </dependency>
      
      <dependency>
        <groupId>jaxen</groupId>
        <artifactId>jaxen</artifactId>
        <version>1.1.1</version>
        <exclusions>
          <exclusion>
            <groupId>jdom</groupId>
            <artifactId>jdom</artifactId>
          </exclusion>
          <exclusion>
            <groupId>xom</groupId>
            <artifactId>xom</artifactId>
          </exclusion>          
          <exclusion>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      
      <dependency>
        <groupId>xml-security</groupId>
        <artifactId>xmlsec</artifactId>
        <version>1.3.0</version>
      </dependency>
      
      <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.8.1</version>
      </dependency>
            
      <dependency>
        <groupId>xml-apis</groupId>
        <artifactId>xml-apis</artifactId>
        <version>1.3.04</version>
      </dependency>
      
    </dependencies>
  </dependencyManagement>
  
  <modules>
    <module>bundle</module>
    <module>core</module>
    <module>dependencies/i18n</module>
    <module>parser</module>
    <module>security</module>
    <module>server</module>
    <module>client</module>
    <module>adapters</module>
    <module>extensions</module>
    <module>spring</module>
    <module>examples</module>
  </modules>
  
  <distributionManagement>
    <repository>
      <id>apache.snapshots</id>
      <name>Apache Incubating Repository</name>
      <url>scp://people.apache.org/home/dandiep/public_html/abdera-take7</url>
    </repository>
  </distributionManagement>

  <properties>
    <jetty.version>6.1.5</jetty.version>
    <topDir>${basedir}</topDir>
  </properties>

  <repositories>
    <repository>
      <id>apache.incubating</id>
      <name>Apache Incubating Repository</name>
      <url>http://people.apache.org/repo/m2-incubating-repository</url>
    </repository>
  </repositories> 
</project>
