<?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>
    <groupId>org.apache.ws.commons.schema</groupId>
    <artifactId>XmlSchema</artifactId>
    <name>XmlSchema</name>
    <version>1.4-SNAPSHOT</version>
    <description>Commons XMLSchema is a light weight schema object model that can be used to manipualte or
        generate a schema. It has a clean, easy to use API and can easily be integrated into an existing project
        since it has almost no dependancies on third party libraries.</description>
    <url>http://ws.apache.org/commons/XmlSchema</url>
    <issueManagement>
        <system>JIRA</system>
        <url>http://issues.apache.org/jira/browse/WSCOMMONS</url>
    </issueManagement>
    <ciManagement>
        <system>Continuum</system>
        <url>unknown</url>
        <notifiers>
            <notifier>
                <sendOnError>false</sendOnError>
                <sendOnFailure>false</sendOnFailure>
                <sendOnSuccess>false</sendOnSuccess>
                <sendOnWarning>false</sendOnWarning>
                <configuration>
                    <address>commons-dev@ws.apache.org</address>
                </configuration>
            </notifier>
        </notifiers>
    </ciManagement>
    <mailingLists>
        <mailingList>
            <name>WS Commons Developers</name>
            <subscribe>commons-dev-subscribe@ws.apache.org</subscribe>
            <unsubscribe>commons-dev-unsubscribe@ws.apache.org</unsubscribe>
            <post>commons-dev@ws.apache.org</post>
            <archive>http://mail-archives.apache.org/mod_mbox/ws-commons-dev/</archive>
        </mailingList>
    </mailingLists>
    <inceptionYear>2004</inceptionYear>
    <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/webservices/commons/trunk/modules/XmlSchema</connection>
        <developerConnection>
            scm:svn:https://svn.apache.org/repos/asf/webservices/commons/trunk/modules/XmlSchema</developerConnection>
        <url>http://svn.apache.org/viewvc/webservices/commons/trunk/modules/XmlSchema</url>
    </scm>
    <organization>
        <name>The Apache Software Foundation</name>
        <url>http://www.apache.org/</url>
    </organization>
    <build>


        <!-- this entry here is for the assembly plugin- For some reason
  		     the assembly plugin cannot override the filter properties (as explained
			 in the docs) and also does not inherit the maven standard properties. This
		     is the one that points to a seperare filter props file --> 
		<filters>
        	<filter>src/main/assembly/filter.properties</filter>
        </filters>

        <!-- adding relevant resources to the jar files -->
       <resources>
          <resource>
             <directory>src/main/resources</directory>
       </resource>
     </resources>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.1</version>
                <executions>
                    <execution>
                        <id>prepareNistTest</id>
                        <phase>generate-test-resources</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <ant inheritRefs="true" antfile="${basedir}/build.xml">
                                    <property value="${basedir}/target" name="build.dir"></property>
                                    <property value="${maven.test.skip}" name="maven.test.skip"></property>
                                    <target name="prepareNistTest"></target>
                                </ant>
                            </tasks>
                        </configuration>
                    </execution>
                  </executions>
            </plugin>
           <plugin>
                <artifactId>maven-release-plugin</artifactId>
                <configuration>
                    <tagBase>https://svn.apache.org/repos/asf/webservices/commons/tags/XmlSchema</tagBase>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.3</source>
                    <target>1.3</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <!--
                        Required to run the TestW3CSchemaBucket test
                        <version>2.3-SNAPSHOT</version>
                -->
                <configuration>
                    <includes>
                        <include>**/*Test.java</include>
                        <include>**/Test*.java</include>
                        <!--        Fails in about half of the tests
                                    <include>tests/w3c/TestW3CSchemaBucket.java</include>
                        -->
                    </includes>
                    <excludes>
                        <exclude>tests/w3c/**.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/bin.xml</descriptor>
                        <descriptor>src/main/assembly/src.xml</descriptor>
			<descriptor>src/main/assembly/doc.xml</descriptor>
                    </descriptors>
                    <tarLongFileMode>gnu</tarLongFileMode>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <attach>true</attach>
                </configuration>
            </plugin>
            
        </plugins>
        <defaultGoal>install</defaultGoal>
    </build>
    <profiles>
        <profile>
            <id>release</id>
            <activation>
                <property>
                    <name>release</name>
                    <value></value>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <attach>true</attach>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
        	<id>DefaultTest</id>
        	<activation>
        		<activeByDefault>true</activeByDefault>
        	</activation>
        	<build>
        		<plugins>
        			<plugin>
        				<artifactId>maven-surefire-plugin</artifactId>
        				<!--
        					Required to run the TestW3CSchemaBucket test
        					<version>2.3-SNAPSHOT</version>
        				-->
        				<configuration>
        					<includes>
        						<include>**/*Test.java</include>
        						<include>**/Test*.java</include>
        						<!--        Fails in about half of the tests
        							<include>tests/w3c/TestW3CSchemaBucket.java</include>
        						-->
        					</includes>
        					<excludes>
        						<exclude>
        							tests/w3c/**.java
        						</exclude>
        					</excludes>
        					<systemProperties>
        						<!--  The default xalan TransformerFactory on the ibm jdk is
        							org.apache.xalan.processor.TransformerFactoryImpl which 
        							has a known issue with implicit namespaces.  Set this 
        							property to use the xsltc TransformerFactory (which 
        							the sun jdk seems to default to).
        						-->
        						<!-- <property>
        							<name>javax.xml.transform.TransformerFactory</name>
        							<value>com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl</value>
        							</property> -->
        					</systemProperties>
        				</configuration>
        			</plugin>
        		</plugins>
        	</build>
        </profile>
        <profile>
        	<id>IBMTest</id>
        	<activation>
        		<property>
        			<name>java.vendor</name>
        			<value>IBM Corporation</value>
        		</property>
        	</activation>
			<dependencies>
				<dependency>
					<groupId>org.apache.bcel</groupId>
					<artifactId>bcel</artifactId>
					<version>5.2</version>
				</dependency>
				<dependency>
					<groupId>xalan</groupId>
					<artifactId>xalan</artifactId>
					<version>2.7.0</version>
				</dependency>
			</dependencies>
        	<build>
        		<plugins>
        			<plugin>
        				<artifactId>maven-surefire-plugin</artifactId>
        				<!--
        					Required to run the TestW3CSchemaBucket test
        					<version>2.3-SNAPSHOT</version>
        				-->
        				<configuration>
        					<includes>
        						<include>**/*Test.java</include>
        						<!--        Fails in about half of the tests
        							<include>tests/w3c/TestW3CSchemaBucket.java</include>
        						-->
        					</includes>
        					<excludes>
        						<exclude>
        							tests/w3c/SchemaTest.java
        						</exclude>
        					</excludes>
        					<systemProperties>
        						<!--  The default xalan TransformerFactory on the ibm jdk is
        							org.apache.xalan.processor.TransformerFactoryImpl which 
        							has a known issue with implicit namespaces.  Set this 
        							property to use the xsltc TransformerFactory (which 
        							the sun jdk seems to default to).
        						-->
        						<property>
        							<name>
        								javax.xml.transform.TransformerFactory
        							</name>
        							<value>
        								org.apache.xalan.xsltc.trax.TransformerFactoryImpl
        							</value>
        						</property>
        					</systemProperties>
        				</configuration>
        			</plugin>
        		</plugins>
        	</build>
        </profile>
    </profiles>
    <pluginRepositories>
        <pluginRepository>
            <id>snapshot</id>
            <name>Snapshot repository</name>
            <url>http://snapshots.maven.codehaus.org/maven2/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>false</enabled>
            </releases>
        </pluginRepository>
        <pluginRepository>
            <id>snapshot-apache</id>
            <name>Apache Snapshot repository</name>
            <url>http://people.apache.org/repo/m2-snapshot-repository</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>false</enabled>
            </releases>
        </pluginRepository>
    </pluginRepositories>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>xmlunit</groupId>
            <artifactId>xmlunit</artifactId>
            <version>1.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.ws.commons</groupId>
            <artifactId>ws-commons-java5</artifactId>
            <version>1.0.1</version>
            <optional>true</optional>
        </dependency>
    </dependencies>
    <reporting>
        <plugins>
             <plugin>
                <artifactId>maven-project-info-reports-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jdepend-maven-plugin</artifactId>
                <version>2.0-beta-1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jxr-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
            </plugin>
        </plugins>
    </reporting>
    <distributionManagement>
        <repository>
            <id>apache-repo</id>
            <name>Maven Central Repository</name>
            <url>scpexe://people.apache.org/www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
        </repository>
        <snapshotRepository>
            <id>apache-snapshots</id>
            <name>Apache Development Repository</name>
            <url>scpexe://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</url>
            <uniqueVersion>false</uniqueVersion>
        </snapshotRepository>
        <site>
            <id>website</id>
            <url>scpexe://people.apache.org/www/ws.apache.org/commons/XmlSchema</url>
        </site>
    </distributionManagement>
    <properties>
    	<!--  should the osgi version be the same as the artifact id ?? -->
        <xmlschema.osgi.version>1.4</xmlschema.osgi.version>
        <bundle.plugin.version>1.4.0</bundle.plugin.version>
    </properties>
</project>
