##  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.
name: Apache Taverna Server
vendor: Apache Software Foundation
maintainer:
	name: Apache Taverna (incubating)
	email: dev@taverna.incubator.apache.org
platform: "Java 8+, Tomcat 6, POSIX"
download: https://taverna.incubator.apache.org/download/server/
homepage: https://taverna.incubator.apache.org/documentation/server/
issues: https://issues.apache.org/jira/browse/TAVERNA/component/12326813
support-contact: users@taverna.incubator.apache.org
