#
# Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0, which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception, which is available at
# https://www.gnu.org/software/classpath/license.html.
#
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
#

-exportcontents: \
                        com.sun.appserv.web.cache;version=${project.osgi.version}, \
                        com.sun.appserv.web.cache.filter;version=${project.osgi.version}, \
                        com.sun.appserv.web.cache.mapping;version=${project.osgi.version}, \
                        com.sun.appserv.web.taglibs.cache;version=${project.osgi.version}, \
                        com.sun.enterprise.security.web;version=${project.osgi.version}, \
                        com.sun.enterprise.util.logging;version=${project.osgi.version}, \
                        com.sun.enterprise.web;version=${project.osgi.version}, \
                        com.sun.enterprise.web.accesslog;version=${project.osgi.version}, \
                        com.sun.enterprise.web.connector.coyote;version=${project.osgi.version}, \
                        com.sun.enterprise.web.connector.extension;version=${project.osgi.version}, \
                        com.sun.enterprise.web.deploy;version=${project.osgi.version}, \
                        com.sun.enterprise.web.jsp;version=${project.osgi.version}, \
                        com.sun.enterprise.web.logger;version=${project.osgi.version}, \
                        com.sun.enterprise.web.logging.pwc;version=${project.osgi.version}, \
                        com.sun.enterprise.web.monitor;version=${project.osgi.version}, \
                        com.sun.enterprise.web.monitor.impl;version=${project.osgi.version}, \
                        com.sun.enterprise.web.pluggable;version=${project.osgi.version}, \
                        com.sun.enterprise.web.pwc;version=${project.osgi.version}, \
                        com.sun.enterprise.web.pwc.connector.coyote;version=${project.osgi.version}, \
                        com.sun.enterprise.web.reconfig;version=${project.osgi.version}, \
                        com.sun.enterprise.web.session;version=${project.osgi.version}, \
                        com.sun.enterprise.web.stats;version=${project.osgi.version}, \
                        com.sun.enterprise.web.util;version=${project.osgi.version}, \
                        com.sun.web.server;version=${project.osgi.version}, \
                        org.glassfish.web;version=${project.osgi.version}, \
                        org.glassfish.web.deployment.archivist;version=${project.osgi.version}, \
                        org.glassfish.web.deployment.descriptor;version=${project.osgi.version}, \
                        org.glassfish.web.deployment.io;version=${project.osgi.version}, \
                        org.glassfish.web.deployment.io.runtime;version=${project.osgi.version}, \
                        org.glassfish.web.deployment.runtime;version=${project.osgi.version}, \
                        org.glassfish.web.deployment.util;version=${project.osgi.version}, \
                        org.glassfish.web.deployment.xml;version=${project.osgi.version}, \
                        org.glassfish.web.deployment.node.runtime.wls;version=${project.osgi.version} \
                        
                        version=${project.osgi.version}

Import-Package: \
    com.sun.logging.enterprise.system.container.web, \
    *

# This is required because WebContainer requires JavaEEUtils service which is provided by ejb-container.
# Having this forces resolver to also pull in ejb-container.
# web-ha is required because web container might require this when ha is enabled.
Require-Bundle: org.glassfish.main.ejb.ejb-container, org.glassfish.main.web.ha
