<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
  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>
    <parent>
        <groupId>org.apache.sling</groupId>
        <artifactId>sling</artifactId>
        <version>26</version>
        <relativePath/>
    </parent>

    <artifactId>org.apache.sling.scripting.jsp.jstl</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>bundle</packaging>

    <name>Apache Sling Scripting JSP Standard Tag Library</name>
    <description>
        JavaServer Pages Standard Tag Library based on Jakarta Taglibs (XML support excluded)
    </description>

    <scm>
        <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-jsp-jstl.git</connection>
        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-jsp-jstl.git</developerConnection>
        <url>https://gitbox.apache.org/repos/asf?p=sling-org-apache-sling-scripting-jsp-jstl.git</url>
    </scm>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                          <Export-Package>
                            javax.servlet.jsp.jstl.*;version=1.1.2,
                            !org.apache.taglibs.standard.extra*,
                            !org.apache.taglibs.standard.*.xml,
                            org.apache.taglibs.standard*;version=1.1.2
                        </Export-Package>
                        <Embed-Dependency>
                            jstl;inline=javax/**,
                            standard;inline=org/apache/taglibs/standard/functions/**|
                                           org/apache/taglibs/standard/lang/**|
                                           org/apache/taglibs/standard/resources/**|
                                           org/apache/taglibs/standard/tag/*/core/**|
                                           org/apache/taglibs/standard/tag/*/fmt/**|
                                           org/apache/taglibs/standard/tag/*/sql/**|
                                           org/apache/taglibs/standard/tei/**|
                                           org/apache/taglibs/standard/tlv/**|
                                           META-INF/c*.tld|
                                           META-INF/fmt*.tld|
                                           META-INF/fn*.tld|
                                           META-INF/permittedTaglibs.tld|
                                           META-INF/scriptfree.tld|
                                           META-INF/sql*.tld
                        </Embed-Dependency>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.1.2</version>
        </dependency>
    </dependencies>
</project>
