<?xml version="1.0" encoding="UTF-8"?>
<!--

    Copyright (c) 1997, 2020 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

-->

<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">

    <parent>
        <groupId>org.glassfish.main</groupId>
        <artifactId>glassfish-nucleus-parent</artifactId>
        <version>6.0.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <groupId>org.glassfish.main.bean-validator</groupId>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>bean-validator</artifactId>
    <name>javax.validation:${javax.validation.version} as OSGi bundle</name>
    <description>JSR 380's RI, Hibernate Validator version ${hibernate-validator.version} and its dependencies repackaged as OSGi bundle</description>

    <properties>
        <findbugs.skip>true</findbugs.skip>
    </properties>

    <developers>
        <developer>
            <id>ss141213</id>
            <name>Sahoo</name>
            <organization>Sun Microsystems, Inc.</organization>
            <roles>
                <role>developer</role>
            </roles>
        </developer>
    </developers>

    <build>
        <plugins>
             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <useDefaultManifestFile>true</useDefaultManifestFile>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathLayoutType>custom</classpathLayoutType>
                            <customClasspathLayout>${artifact.artifactId}.${artifact.extension}</customClasspathLayout>
                        </manifest>
                    </archive>
                    <excludes>
                        <exclude>**/.ade_path/**</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.4.0</version>
                <configuration>
                    <instructions>
                        <Embed-Dependency>
                            <!-- Only specify root artifacts that need to be embedded, everything else
                            will be pulled in automatically based on Private-Package settings. -->
                            *; artifactId=hibernate-validator; inline=true
                        </Embed-Dependency>
                        <Export-Package>
                            javax.validation.*; version=${javax.validation.osgi.version},
                            org.hibernate.validator.*; version=${hibernate-validator.version},
                            org.glassfish.validation; version=${hibernate-validator.version}
                        </Export-Package>

                        <Private-Package>
                            <!-- JBoss logging is used by Hibernate Validator as of version 4.3.0.Final.
                                 We must repackage it privately in this bundle.
                            -->
                            org.jboss.logging.*,com.fasterxml.*
                        </Private-Package>

                        <Import-Package>
                            <!--
                                - bean validator has optional dependency on JPA API. More over, it relies on
                                JPA 2.0, as it tries to dynamically load javax.persistence.PersistenceUtil.class,
                                which is a JPA 2 class.
                                - jboss.logging has the following optional dependencies (see manifest in
                                jboss-logging-*.jar):
                                org.apache.log4j, org.jboss.logmanager, org.slf4j, org.slf4j.spi
                                - Hibernate Validator has optional dependencies on (see manifest in
                                hibernate-validator-*.jar): javax.persistence, org.joda.time, org.jsoup, org.jsoup.safety
                            javax.enterprise.inject.*; resolution:=optional,
                            -->
                            org.slf4j; org.slf4j.spi; org.slf4j.helpers; version=${slf4j.version}; resolution:=optional,
                            javax.persistence.*; version="2.0"; resolution:=optional,
                            org.joda.time; resolution:=optional; version="[2.0.0,3.0.0)",
			    javax.money;version="[1.0.0,2.0.0)";resolution:=optional,
                            org.jsoup.*; resolution:=optional; version="[1.5.2,2.0.0)",
                            org.apache.log4j; resolution:=optional,javax.script.*;version="0",
                            org.jboss.logmanager; resolution:=optional,
                            javax.el;version="[2.2,4]",
                            com.sun.el,
                            com.sun.el.*,
                            com.sun.el.lang.*,
                            com.sun.el.util.*,
                            javax.enterprise.inject.*; resolution:=optional,
                            javax.enterprise.context.*; resolution:=optional,
                            javax.enterprise.event.*; resolution:=optional,
                            javax.enterprise.util.*; resolution:=optional,
                            javax.interceptor.*; resolution:=optional,
                            com.thoughtworks.paranamer.*; resolution:=optional,
                            javafx.beans.value.*; resolution:=optional,
                            javafx.beans.property.*; resolution:=optional,
                            javafx.application; resolution:=optional,
                            org.apache.logging.log4j.*; resolution:=optional,
                            org.hibernate.validator.*; version=${hibernate-validator.version},
                            *
                        </Import-Package>
                        <!--
                        See https://hibernate.onjira.com/browse/HV-562 which I have filed against hibernate validator.
                        It's a bug in hibernate validator the way it detects JPA. It uses thread's context classloader to
                        see if JPA classes are available and then goes onto instantiate its JPATraversableResolver which
                        has staic dependency on JPA classes. It should have used its own class loader to detect existence
                        of JPA classes. If we don't add this DynamicImport-Package, what could happen is that at the time
                        of resolution of hibernate-validator, it's optional dependency on javax.persistence may not be
                        satisfied, so this bundle won't be able to load jpa classes, yet when it uses TCL to detect JPA,
                        that might return true. Based on this outcome, it could go onto use JPATraversableResolver and
                        eventually fail with NCDFE. Adding a DynamicImport-Package helps rewiring this bundle to JPA late.
                        -->
                        <DynamicImport-Package>javax.persistence; javax.persistence.*;  version="2.0"</DynamicImport-Package>
                        <Implementation-Version>
                            ${hibernate-validator.version}
                        </Implementation-Version>
                    </instructions>
                    <!-- Maven uses the output directory (target/classes)
                    rather than the final bundle, when compiling against
                    projects in the same reactor (ie. the same build).
                    Since this jar comprises of classes that come from
                    some other jar and other modules depend on this
                    artifact, we need to unpack.
                    -->
                    <unpackBundle>true</unpackBundle>
                </configuration>
                <executions>
                    <execution>
                        <id>osgi-bundle</id>
                        <phase>package</phase>
                        <goals>
                            <goal>bundle</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>get-sources</id>
                        <phase>process-sources</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/sources</outputDirectory>
                            <stripVersion>true</stripVersion>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>org.hibernate.validator</groupId>
                                    <artifactId>hibernate-validator</artifactId>
                                    <version>${hibernate-validator.version}</version>
                                    <classifier>sources</classifier>
                                    <overWrite>false</overWrite>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>add-source</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>${project.build.directory}/sources</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- This dependency is not required in latest hibernate jars. Keeping this in commented form for reference.
            <dependency>-->
            <!--
                Although hibernate validator uses maven-shade-plugin to repackage com.googlecode.jtype classes
                bu org.hibernate.validator.jtype classes, the shade plugin seems to leave behind some
                constant pool entries referring to google classes, so we need to package google jtype classes as well.
                I have asked Emmanuel Bernard about this. It appears to be a bug in shade plugin or HV.
                Because of shade-plugin, the dependency is remove from hibernate-validator pom, so we need to add it
                here so that we can package these classes.
            -->
            <!--<groupId>com.googlecode.jtype</groupId>
            <artifactId>jtype</artifactId>
            <optional>true</optional>
        </dependency>-->
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <optional>true</optional>
        </dependency>
        <!--
            Remove this once HK2 config bean generation issue is fixed when using 2.0.0 based version of javax.validation APIs.
            Maven bundle plugin while determining dependencies of hibernate-validator will find javax.validation.validation-api in its
            dependencies list and pick the version value based on the javax.validation.validation-api dependency defined
            in parent project i.e., nuclues' pom.xml.
            Hence explicitly adding the required version as we use different version for compilation purposes.
        -->
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>${javax.validation.version}</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging-annotations</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <!--
        This module repackages various maven artifacts and artifacts like hibernate-validator does not
        have java-docs published. Hence, we cannot repackage the java-docs. We skip java-doc
        generation and use empty java-doc plugin
        to make Nexus release job succeed.
    -->
    <profiles>
        <profile>
            <!-- generate empty javadoc jar -->
            <id>release-phase2</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <configuration>
                            <skip>true</skip>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jar-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create-empty-javadoc-jar</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                                <configuration>
                                    <classesDirectory>
                                        ${project.build.directory}/javadoc
                                    </classesDirectory>
                                    <classifier>javadoc</classifier>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
