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

    DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.

    Copyright (c) 1997-2017 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://oss.oracle.com/licenses/CDDL+GPL-1.1
    or 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 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</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.moduleName>
	    java.activation
	</activation.moduleName>
	<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>

	    <plugin>
		<artifactId>maven-javadoc-plugin</artifactId>
		<inherited>false</inherited>
                <executions>
		    <execution>
			<phase>package</phase>
			<goals>
			    <goal>javadoc</goal>
			</goals>
			<configuration>
			    <author>false</author>
			    <description>
				JavaBeans Activation Framework API documentation
			    </description>
			    <doctitle>
				JavaBeans Activation Framework API documentation
			    </doctitle>
			    <windowtitle>
				JavaBeans Activation Framework API documentation
			    </windowtitle>
			    <splitindex>true</splitindex>
			    <use>true</use>
			    <notimestamp>true</notimestamp>
			    <serialwarn>true</serialwarn>
			    <quiet>true</quiet>
			    <bottom>
<![CDATA[Copyright &#169; 1996-2017,
    <a href="http://www.oracle.com">Oracle</a>
    and/or its affiliates. All Rights Reserved.
    Use is subject to
    <a href="{@docRoot}/doc-files/speclicense.html" target="_top">license terms</a>.
]]>
			    </bottom>
			    <groups>
				<group>
				    <title>JavaBeans Activation Framework API Packages</title>
				    <packages>javax.*</packages>
				</group>
			    </groups>
			    <subpackages>javax.activation</subpackages>
			    <!--
				Links to Java SE javadocs.

				XXX - links need to include a trailing "/."
				      because Maven strips off a trailing "/"
				      before passing the option to the javadoc
				      command, which then strips off the last
				      name if it doesn't end with "/".
			    -->
			    <links>
				<link>http://docs.oracle.com/javase/1.5.0/docs/api/.</link>
			    </links>
			</configuration>
		    </execution>
                </executions>
	    </plugin>
	</plugins>
    </build>

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