<?xml version="1.0" encoding="iso-8859-1"?>
<!--

    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.

    Copyright (c) 1997-2015 Oracle and/or its affiliates. All rights reserved.

    The contents of this file are subject to the terms of either the GNU
    General Public License Version 2 only ("GPL") or the Common Development
    and Distribution License("CDDL") (collectively, the "License").  You
    may not use this file except in compliance with the License.  You can
    obtain a copy of the License at
    https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
    or packager/legal/LICENSE.txt.  See the License for the specific
    language governing permissions and limitations under the License.

    When distributing the software, include this License Header Notice in each
    file and include the License file at packager/legal/LICENSE.txt.

    GPL Classpath Exception:
    Oracle designates this particular file as subject to the "Classpath"
    exception as provided by Oracle in the GPL Version 2 section of the License
    file that accompanied this code.

    Modifications:
    If applicable, add the following below the License Header, with the fields
    enclosed by brackets [] replaced by your own identifying information:
    "Portions Copyright [year] [name of copyright owner]"

    Contributor(s):
    If you wish your version of this file to be governed by only the CDDL or
    only the GPL Version 2, indicate your decision by adding "[Contributor]
    elects to include this software in this distribution under the [CDDL or GPL
    Version 2] license."  If you don't indicate a single choice of license, a
    recipient has the option to distribute your version of this file under
    either the CDDL, the GPL Version 2 or to extend the choice of license to
    its licensees as provided above.  However, if you add GPL Version 2 code
    and therefore, elected the GPL Version 2 license, then the option applies
    only if the new code is made subject to such option by the copyright
    holder.

-->

<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">
    <parent>
	<groupId>com.sun.activation</groupId>
	<artifactId>all</artifactId>
	<version>1.2.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sun.activation</groupId>
    <artifactId>javax.activation</artifactId>
    <packaging>jar</packaging>
    <name>JavaBeans Activation Framework</name>

    <properties>
	<activation.extensionName>
	    javax.activation
	</activation.extensionName>
	<activation.specificationTitle>
	    JavaBeans(TM) Activation Framework Specification
	</activation.specificationTitle>
	<activation.implementationTitle>
	    javax.activation
	</activation.implementationTitle>
	<activation.packages.export>
	    javax.activation.*; version=${activation.spec.version},
	    com.sun.activation.*; version=${activation.osgiversion}
	</activation.packages.export>
	<findbugs.skip>
	    false
	</findbugs.skip>
	<findbugs.exclude>
	    ${project.basedir}/exclude.xml
	</findbugs.exclude>
    </properties>

    <build>
	<resources>
	    <resource>
		<directory>src/main/resources</directory>
		<filtering>true</filtering>
	    </resource>
	</resources>
	<plugins>
	    <!--
		Configure compiler plugin to print lint warnings.
	    -->
	    <plugin>
		<artifactId>maven-compiler-plugin</artifactId>
		<executions>
		    <execution>
			<id>default-compile</id>
			<configuration>
			    <source>1.5</source>
			    <target>1.5</target>
			    <fork>true</fork>
			    <!--
				ignore some of the errors that are
				too hard to fix for now
			    -->
			    <!--
			    <compilerArguments>
				<Xlint:all/>
				<Xlint:-rawtypes/>
				<Xlint:-unchecked/>
				<Xlint:-finally/>
			    </compilerArguments>
			    <showWarnings>true</showWarnings>
			    -->
			</configuration>
		    </execution>
		    <execution>
			<id>default-testCompile</id>
			<configuration>
			    <source>1.5</source>
			    <target>1.5</target>
			</configuration>
		    </execution>
		</executions>
	    </plugin>

	    <!--
		Configure test plugin to find *TestSuite classes.
	    -->
	    <plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-surefire-plugin</artifactId>
		<configuration>
		    <includes>
			<include>**/*Test.java</include>
			<include>**/*TestSuite.java</include>
		    </includes>
		</configuration>
	    </plugin>
	</plugins>
    </build>

    <dependencies>
	<dependency>
	    <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
	    <version>4.7</version>
	    <scope>test</scope>
	    <optional>true</optional>
	</dependency>
    </dependencies>
</project>
