# 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.

OpenIDE-Module-Display-Category=Java SE
OpenIDE-Module-Name=Maven
OpenIDE-Module-Long-Description=NetBeans IDE support for <a href="http://maven.apache.org">Apache Maven</a>. <p> \
  Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. To learn more about Apache Maven, visit <a href="http://maven.apache.org/what-is-maven.html">What is Maven?</a> page. <p> \
 The IDE support includes own project type entirely based on Maven's medatata, code completion for Maven's project files, integration with other tools in the IDE etc. 
OpenIDE-Module-Short-Description=NetBeans Maven project system support
