#
# 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.jdbc; \
                        com.sun.appserv.server; \
                        org.glassfish.api; \
                        org.glassfish.api.admin; \
                        org.glassfish.api.admin.cli; \
                        org.glassfish.api.admin.config; \
                        org.glassfish.api.admin.progress; \
                        org.glassfish.api.admingui; \
                        org.glassfish.api.amx; \
                        org.glassfish.api.container; \
                        org.glassfish.api.content; \
                        org.glassfish.api.deployment; \
                        org.glassfish.api.deployment.archive; \
                        org.glassfish.api.event; \
                        org.glassfish.api.invocation; \
                        org.glassfish.api.jdbc; \
                        org.glassfish.api.logging; \
                        org.glassfish.api.interceptor; \
                        org.glassfish.api.managedbean; \
                        org.glassfish.api.monitoring; \
                        org.glassfish.api.naming; \
                        org.glassfish.api.virtualization; \
                        org.glassfish.api.web; \
                        org.glassfish.api.branding; version=${project.version}
