<?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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.apache.taverna.commonactivities</groupId>
		<artifactId>apache-taverna-common-activities</artifactId>
		<version>2.1.0-incubating-SNAPSHOT</version>
	</parent>
	<artifactId>taverna-xpath-activity</artifactId>
	<name>Apache Taverna XPath Activity</name>
	<packaging>bundle</packaging>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<extensions>true</extensions>
				<configuration>
					<instructions>
						<Import-Package>org.jaxen,*</Import-Package>
					</instructions>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>org.apache.taverna.engine</groupId>
			<artifactId>taverna-reference-api</artifactId>
			<version>${taverna.engine.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.taverna.engine</groupId>
			<artifactId>taverna-workflowmodel-api</artifactId>
			<version>${taverna.engine.version}</version>
		</dependency>

		<dependency>
			<groupId>org.dom4j</groupId>
			<artifactId>com.springsource.org.dom4j</artifactId>
			<version>${dom4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.jaxen</groupId>
			<artifactId>com.springsource.org.jaxen</artifactId>
			<version>${jaxen.version}</version>
		</dependency>
	</dependencies>
</project>
