<?xml version="1.0" encoding="UTF-8"?>
<!--
~   Licensed 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.basepom</groupId>
        <artifactId>basepom-foundation</artifactId>
        <version>59</version>
        <relativePath>../foundation</relativePath>
    </parent>

    <artifactId>basepom-minimal</artifactId>
    <packaging>pom</packaging>

    <!--
        <name>basepom-minimal</name>
        <description>Base POM for new projects with minimal rules applied. Does not include any dependency, distribution or repository information.</description>
        <url>https://github.com/basepom/basepom/minimal</url>
    -->

    <properties>
        <basepom.check.skip-pmd>${basepom.check.skip-extended}</basepom.check.skip-pmd>
        <basepom.check.skip-checkstyle>${basepom.check.skip-extended}</basepom.check.skip-checkstyle>

        <basepom.check.fail-pmd>${basepom.check.fail-extended}</basepom.check.fail-pmd>
        <basepom.check.fail-checkstyle>${basepom.check.fail-extended}</basepom.check.fail-checkstyle>

        <!-- deprecated, do not use any longer -->
        <basepom.shaded.main-class />

        <!-- shade and repack plugin.  -->
        <basepom.main-class>${basepom.shaded.main-class}</basepom.main-class>

        <!-- policy jar for license and checkstyle defaults -->
        <dep.basepom-policy.version>10</dep.basepom-policy.version>
    </properties>

    <repositories>
        <!-- Fix for a bad dependency in spring -->
        <repository>
            <id>jaspersoft.org</id>
            <url>dummy-url</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.basepom.maven</groupId>
                    <artifactId>duplicate-finder-maven-plugin</artifactId>
                    <configuration>
                        <exceptions>
                            <exception>
                                <conflictingDependencies>
                                    <dependency>
                                        <groupId>com.google.code.findbugs</groupId>
                                        <artifactId>jsr305</artifactId>
                                    </dependency>
                                    <dependency>
                                        <groupId>com.google.code.findbugs</groupId>
                                        <artifactId>annotations</artifactId>
                                    </dependency>
                                </conflictingDependencies>
                                <packages>
                                    <package>javax.annotation</package>
                                </packages>
                            </exception>
                            <exception>
                                <conflictingDependencies>
                                    <dependency>
                                        <groupId>com.google.code.findbugs</groupId>
                                        <artifactId>annotations</artifactId>
                                    </dependency>
                                    <dependency>
                                        <groupId>net.jcip</groupId>
                                        <artifactId>jcip-annotations</artifactId>
                                    </dependency>
                                </conflictingDependencies>
                                <packages>
                                    <package>net.jcip.annotations</package>
                                </packages>
                            </exception>
                            <exception>
                                <conflictingDependencies>
                                    <dependency>
                                        <groupId>com.google.code.findbugs</groupId>
                                        <artifactId>annotations</artifactId>
                                    </dependency>
                                    <dependency>
                                        <groupId>com.google.code.findbugs</groupId>
                                        <artifactId>findbugs-annotations</artifactId>
                                    </dependency>
                                    <dependency>
                                        <groupId>com.github.spotbugs</groupId>
                                        <artifactId>spotbugs-annotations</artifactId>
                                    </dependency>
                                </conflictingDependencies>
                                <packages>
                                    <package>edu.umd.cs.findbugs.annotations</package>
                                </packages>
                            </exception>
                            <!-- Java injection is a mess as well... -->
                            <exception>
                                <conflictingDependencies>
                                    <dependency>
                                        <groupId>javax.inject</groupId>
                                        <artifactId>javax.inject</artifactId>
                                    </dependency>
                                    <dependency>
                                        <groupId>org.glassfish.hk2.external</groupId>
                                        <artifactId>javax.inject</artifactId>
                                    </dependency>
                                    <!-- Can contain the classes in the javax package if using version 1.x-->
                                    <dependency>
                                        <groupId>jakarta.inject</groupId>
                                        <artifactId>jakarta.inject-api</artifactId>
                                    </dependency>
                                    <!-- Can contain the classes in the javax package if using version 2.6.1-->
                                    <dependency>
                                        <groupId>org.glassfish.hk2.external</groupId>
                                        <artifactId>jakarta.inject</artifactId>
                                    </dependency>
                                </conflictingDependencies>
                                <packages>
                                    <package>javax.inject</package>
                                </packages>
                            </exception>
                            <exception>
                                <conflictingDependencies>
                                    <dependency>
                                        <groupId>org.glassfish.hk2.external</groupId>
                                        <artifactId>jakarta.inject</artifactId>
                                    </dependency>
                                    <dependency>
                                        <groupId>jakarta.inject</groupId>
                                        <artifactId>jakarta.inject-api</artifactId>
                                    </dependency>
                                </conflictingDependencies>
                                <packages>
                                    <package>jakarta.inject</package>
                                </packages>
                            </exception>
                            <!-- Glassfish repackages aopalliance annotations -->
                            <exception>
                                <conflictingDependencies>
                                    <dependency>
                                        <groupId>aopalliance</groupId>
                                        <artifactId>aopalliance</artifactId>
                                    </dependency>
                                    <dependency>
                                        <groupId>org.glassfish.hk2.external</groupId>
                                        <artifactId>aopalliance-repackaged</artifactId>
                                    </dependency>
                                </conflictingDependencies>
                                <packages>
                                    <package>org.aopalliance.aop</package>
                                    <package>org.aopalliance.intercept</package>
                                </packages>
                            </exception>
                        </exceptions>
                        <ignoredResourcePatterns>
                            <!-- common file endings -->
                            <ignoredResourcePattern>.*\.afm$</ignoredResourcePattern>
                            <ignoredResourcePattern>.*\.dtd$</ignoredResourcePattern>
                            <ignoredResourcePattern>.*\.gif$</ignoredResourcePattern>
                            <ignoredResourcePattern>.*\.html</ignoredResourcePattern>
                            <ignoredResourcePattern>.*\.java$</ignoredResourcePattern>
                            <ignoredResourcePattern>.*\.png$</ignoredResourcePattern>
                            <ignoredResourcePattern>.*\.properties$</ignoredResourcePattern>
                            <ignoredResourcePattern>.*\.txt$</ignoredResourcePattern>
                            <!-- common file name patterns -->
                            <ignoredResourcePattern>^\..*</ignoredResourcePattern>
                            <ignoredResourcePattern>about.*</ignoredResourcePattern>
                            <ignoredResourcePattern>about_files\/.*</ignoredResourcePattern>
                            <ignoredResourcePattern>license\/.*</ignoredResourcePattern>
                            <ignoredResourcePattern>.*\/schema$</ignoredResourcePattern>
                            <!-- jars tend to contain these files all the time -->
                            <ignoredResourcePattern>mime\.types$</ignoredResourcePattern>
                            <ignoredResourcePattern>plugin\.properties$</ignoredResourcePattern>
                            <ignoredResourcePattern>plugin\.xml$</ignoredResourcePattern>
                            <ignoredResourcePattern>reference\.conf$</ignoredResourcePattern>
                            <!-- the logging config should not be ignored but they are a constant -->
                            <!-- source of annoyance. If you use logging properties from the classpath -->
                            <!-- then you are in trouble anyway -->
                            <ignoredResourcePattern>log4j\.xml$</ignoredResourcePattern>
                            <ignoredResourcePattern>log4j\.properties$</ignoredResourcePattern>
                            <ignoredResourcePattern>logback\.xml$</ignoredResourcePattern>
                            <ignoredResourcePattern>logback\.properties$</ignoredResourcePattern>
                        </ignoredResourcePatterns>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-pmd-plugin</artifactId>
                    <configuration>
                        <excludeRoots>
                            <excludeRoot>target/generated-sources/stubs</excludeRoot>
                            <excludeRoot>target/generated-sources/annotations</excludeRoot>
                        </excludeRoots>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <configuration>
                        <!-- MDEP-804 -->
                        <ignoredNonTestScopedDependencies>
                            <ignoreNonTestScopedDependency>*</ignoreNonTestScopedDependency>
                        </ignoredNonTestScopedDependencies>
                        <ignoredDependencies>
                            <!-- jars that only contain annotations are pretty rough to detect as they need -->
                            <!-- to be present when compiling but may or may not be referenced at runtime -->
                            <ignoredDependency>aopalliance:aopalliance</ignoredDependency>
                            <ignoredDependency>com.github.spotbugs:spotbugs-annotations</ignoredDependency>
                            <ignoredDependency>com.google.code.findbugs:annotations</ignoredDependency>
                            <ignoredDependency>com.google.code.findbugs:jsr305</ignoredDependency>
                            <ignoredDependency>com.google.errorprone:error_prone_annotations</ignoredDependency>
                            <ignoredDependency>jakarta.inject:jakarta.inject-api</ignoredDependency>
                            <ignoredDependency>javax.inject:javax.inject</ignoredDependency>
                            <ignoredDependency>net.jcip:jcip-annotations</ignoredDependency>
                            <ignoredDependency>org.checkerframework:checker-qual</ignoredDependency>
                            <ignoredDependency>org.glassfish.hk2.external:aopalliance-repackaged</ignoredDependency>
                            <ignoredDependency>org.glassfish.hk2.external:jakarta.inject</ignoredDependency>
                            <ignoredDependency>org.glassfish.hk2.external:javax.inject</ignoredDependency>
                        </ignoredDependencies>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <dependencies>
                        <dependency>
                            <groupId>org.basepom</groupId>
                            <artifactId>basepom-policy</artifactId>
                            <version>${dep.basepom-policy.version}</version>
                        </dependency>
                    </dependencies>
                    <configuration>
                        <configLocation>checkstyle/checkstyle-basepom.xml</configLocation>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <configuration>
                        <transformers combine.children="append">
                            <transformer implementation="org.basepom.maven.shade.CollectingManifestResourceTransformer">
                                <collectSections>true</collectSections>
                                <manifestEntries>
                                    <X-BasePOM-Build-Id>${basepom.shaded.id}</X-BasePOM-Build-Id>
                                    <X-BasePOM-Name>${project.name}</X-BasePOM-Name>
                                    <X-BasePOM-Git-Commit-Id>${git.commit.id}</X-BasePOM-Git-Commit-Id>
                                </manifestEntries>
                                <mainClass>${basepom.main-class}</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.basepom</groupId>
                            <artifactId>basepom-policy</artifactId>
                            <version>${dep.basepom-policy.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <plugin>
                    <groupId>org.basepom.maven</groupId>
                    <artifactId>repack-maven-plugin</artifactId>
                    <configuration>
                        <mainClass>${basepom.main-class}</mainClass>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>com.github.spotbugs</groupId>
                    <artifactId>spotbugs-maven-plugin</artifactId>
                    <dependencies>
                        <dependency>
                            <groupId>org.basepom</groupId>
                            <artifactId>basepom-policy</artifactId>
                            <version>${dep.basepom-policy.version}</version>
                        </dependency>
                    </dependencies>
                    <configuration>
                        <excludeFilterFiles>
                            <excludeFilterFile>spotbugs/spotbugs-suppress.xml</excludeFilterFile>
                        </excludeFilterFiles>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <configuration>
                        <systemPropertyVariables combine.children="append">
                            <sun.jnu.encoding>${project.build.sourceEncoding}</sun.jnu.encoding>
                            <user.timezone>UTC</user.timezone>
                            <java.awt.headless>true</java.awt.headless>
                            <java.util.logging.SimpleFormatter.format>%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s %5$s%6$s%n</java.util.logging.SimpleFormatter.format>
                        </systemPropertyVariables>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <systemPropertyVariables combine.children="append">
                            <sun.jnu.encoding>${project.build.sourceEncoding}</sun.jnu.encoding>
                            <user.timezone>UTC</user.timezone>
                            <java.awt.headless>true</java.awt.headless>
                            <java.util.logging.SimpleFormatter.format>%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s %5$s%6$s%n</java.util.logging.SimpleFormatter.format>
                        </systemPropertyVariables>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>
