<?xml version="1.0" encoding="UTF-8"?>
<!--
   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.commons</groupId>
        <artifactId>commons-parent</artifactId>
        <version>67</version>
    </parent>

    <artifactId>commons-jexl3</artifactId>
    <version>3.3.1-SNAPSHOT</version>
    <name>Apache Commons JEXL</name>
    <description>JEXL is a library intended to facilitate the implementation of scripting features in
        applications and frameworks written in Java.</description>
    <url>https://commons.apache.org/proper/commons-jexl/</url>
    <inceptionYear>2001</inceptionYear>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <commons.componentid>jexl</commons.componentid>
        <commons.module.name>org.apache.commons.jexl3</commons.module.name>
        <commons.site.path>jexl</commons.site.path>
        <commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-jexl</commons.scmPubUrl>
        <commons.scmPubCheckoutDirectory>site-content</commons.scmPubCheckoutDirectory>
        <!-- The RC version used in the staging repository URL. -->
        <commons.rc.version>RC2</commons.rc.version>
        <commons.release.2.version>2.1.1</commons.release.2.version>
        <!-- Override the default, which is ${project.artifactId}-${commons.release.[23].version} -->
        <commons.release.name>commons-jexl-${commons.release.version}</commons.release.name>
        <commons.release.2.name>commons-jexl-${commons.release.2.version}</commons.release.2.name>
        <commons.release.2.hash>sha1</commons.release.2.hash>
        <commons.release.3.name>commons-jexl-${commons.release.3.version}</commons.release.3.name>
        <commons.release.3.hash>sha1</commons.release.3.hash>
        <commons.release.3.desc>Legacy</commons.release.3.desc>
        <commons.release.3.version>1.1</commons.release.3.version>
        <commons.release.3.binary.suffix />
        <commons.jira.id>JEXL</commons.jira.id>
        <commons.jira.pid>12310479</commons.jira.pid>
        <japicmp.skip>false</japicmp.skip>

        <!-- override of Jacoco properties defined in CP52 -->
        <commons.jacoco.classRatio>0.95</commons.jacoco.classRatio>
        <commons.jacoco.instructionRatio>0.85</commons.jacoco.instructionRatio>
        <commons.jacoco.methodRatio>0.85</commons.jacoco.methodRatio>
        <commons.jacoco.branchRatio>0.75</commons.jacoco.branchRatio>
        <commons.jacoco.complexityRatio>0.70</commons.jacoco.complexityRatio>
        <commons.jacoco.lineRatio>0.85</commons.jacoco.lineRatio>
        <commons.jacoco.haltOnFailure>false</commons.jacoco.haltOnFailure>

        <!-- Cyclone -->
        <commons.cyclonedx.version>2.7.5</commons.cyclonedx.version>

        <!--
          Encoding of Java source files: ensures that the compiler and
          the javadoc generator use the right encoding. Subprojects may
          overwrite this, if they are using another encoding.
        -->
        <commons.encoding>iso-8859-1</commons.encoding>
        <!-- used in this pom to provide the Javadoc HTML file encoding -->
        <commons.docEncoding>${commons.encoding}</commons.docEncoding>
        <!-- Define source encoding for filtering; used by general plugins -->
        <project.build.sourceEncoding>${commons.encoding}</project.build.sourceEncoding>
        <!-- This is used by reporting plugins -->
        <project.reporting.outputEncoding>${commons.encoding}</project.reporting.outputEncoding>
        <project.build.outputTimestamp>2024-01-01T00:00:00Z</project.build.outputTimestamp>

        <!-- Commons release plugin -->
        <commons.bc.version>3.3</commons.bc.version>
        <commons.release.version>3.3.1</commons.release.version>
        <commons.release.isDistModule>true</commons.release.isDistModule>
        <commons.distSvnStagingUrl>scm:svn:https://dist.apache.org/repos/dist/dev/commons/${commons.componentid}</commons.distSvnStagingUrl>
    </properties>

    <scm>
        <connection>scm:git:https://gitbox.apache.org/repos/asf/commons-jexl.git</connection>
        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/commons-jexl.git</developerConnection>
        <url>https://gitbox.apache.org/repos/asf/commons-jexl.git</url>
      <tag>HEAD</tag>
    </scm>
    <issueManagement>
        <system>jira</system>
        <url>https://issues.apache.org/jira/browse/JEXL</url>
    </issueManagement>
    <distributionManagement>
        <site>
            <id>apache.website</id>
            <name>Apache Commons Site</name>
            <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-jexl/</url>
        </site>
    </distributionManagement>

    <dependencies>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.googlecode.concurrentlinkedhashmap</groupId>
            <artifactId>concurrentlinkedhashmap-lru</artifactId>
            <version>1.4.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <defaultGoal>clean verify apache-rat:check spotbugs:check japicmp:cmp checkstyle:check javadoc:javadoc</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <argLine>@{argLine} -Xmx128m</argLine>
                    <includes>
                        <include>**/*Test.java</include>
                    </includes>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptors>
                        <descriptor>src/assembly/bin.xml</descriptor>
                        <descriptor>src/assembly/src.xml</descriptor>
                    </descriptors>
                    <tarLongFileMode>gnu</tarLongFileMode>
                    <finalName>commons-jexl-${project.version}</finalName>
                </configuration>
            </plugin>

            <plugin>
                <groupId>com.helger.maven</groupId>
                <artifactId>ph-javacc-maven-plugin</artifactId>
                <version>4.1.5</version>
                <executions>
                    <execution>
                        <id>jexl-jjtree</id>
                        <configuration>
                            <sourceDirectory>${basedir}/src/main/java/org/apache/commons/jexl3/parser</sourceDirectory>
                            <outputDirectory>${project.build.directory}/generated-sources/java</outputDirectory>
                        </configuration>
                        <goals>
                            <goal>jjtree-javacc</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <phase>process-sources</phase>
                        <configuration>
                            <target>
                                <!-- change an exception used for signaling to be static -->
                                <replaceregexp
                                        file="target/generated-sources/java/org/apache/commons/jexl3/parser/Parser.java"
                                        byline="true"
                                        match="private final LookaheadSuccess jj_ls ="
                                        replace="private static final LookaheadSuccess jj_ls ="/>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                            <exclude>**/generated-sources/**/*</exclude>
                            <exclude>**/org/apache/commons/jexl3/parser/*.class</exclude>
                            <exclude>**/org/apache/commons/jexl3/**/*Test.class</exclude>
                            <exclude>**/java/**/*</exclude>
                            <exclude>**/javax/**/*</exclude>
                            <exclude>**/com/sun/**/*</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-scm-publish-plugin</artifactId>
                <configuration>
                    <ignorePathsToDelete>
                        <ignorePathToDelete>javadocs</ignorePathToDelete>
                    </ignorePathsToDelete>
                </configuration>
            </plugin>

            <!-- Allow checkstyle to be run from command-line. Must agree with config in report section. -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <configuration>
                    <configLocation>${basedir}/src/main/config/checkstyle.xml</configLocation>
                    <suppressionsLocation>${basedir}/src/main/config/checkstyle-suppressions.xml</suppressionsLocation>
                    <excludes>org/apache/commons/jexl3/parser/*.java</excludes>
                    <headerLocation>${basedir}/src/main/config/header.txt</headerLocation>
                    <enableRulesSummary>true</enableRulesSummary>
                    <!-- Needed to define config_loc for use by Eclipse -->
                    <propertyExpansion>config_loc=${basedir}/src/main/config</propertyExpansion>
                </configuration>
            </plugin>

            <!-- Allow Spotbugs to be run from command-line. Must agree with config in report section. -->
            <plugin>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-maven-plugin</artifactId>
                <configuration>
                    <effort>Max</effort>
                    <threshold>High</threshold>
                    <xmlOutput>true</xmlOutput>
                    <excludeFilterFile>${basedir}/src/main/config/findbugs-exclude-filter.xml</excludeFilterFile>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.ow2.asm</groupId>
                        <artifactId>asm</artifactId>
                        <version>9.6</version>
                    </dependency>
                </dependencies>
            </plugin>

            <!-- Allow RAT to be run from command-line. Must agree with config in report section. -->
            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>.travis.yml</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <configuration>
                    <rulesets>
                        <ruleset>${project.basedir}/src/main/config/pmd.xml</ruleset>
                    </rulesets>
                    <excludes>
                        <exclude>org/apache/commons/jexl3/parser/Parser.java</exclude>
                        <exclude>org/apache/commons/jexl3/parser/AST*.java</exclude>
                        <exclude>org/apache/commons/jexl3/parser/ParserTokenManager.java</exclude>
                        <exclude>org/apache/commons/jexl3/parser/*Constants.java</exclude>
                        <exclude>org/apache/commons/jexl3/parser/AbstractCharStream.java</exclude>
                        <exclude>org/apache/commons/jexl3/parser/*Provider.java</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <!-- japicmp -->
            <plugin>
                <groupId>com.github.siom79.japicmp</groupId>
                <artifactId>japicmp-maven-plugin</artifactId>
                <configuration>
                    <parameter>
                        <includes>
                            <include>org.apache.commons.jexl3</include>
                            <include>org.apache.commons.jexl3.introspection</include>
                            <include>org.apache.commons.jexl3.scripting</include>
                        </includes>
                        <excludes>
                            <exclude>org.apache.commons.jexl3.internal</exclude>
                            <exclude>org.apache.commons.jexl3.internal.introspection</exclude>
                            <exclude>org.apache.commons.jexl3.parser</exclude>
                        </excludes>
                        <onlyModified>true</onlyModified>
                        <accessModifier>protected</accessModifier>
                        <ignoreMissingClasses>true</ignoreMissingClasses>
                        <breakBuildOnBinaryIncompatibleModifications>false</breakBuildOnBinaryIncompatibleModifications>
                        <breakBuildIfCausedByExclusion>false</breakBuildIfCausedByExclusion>
                    </parameter>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>animal-sniffer-maven-plugin</artifactId>
                <version>1.23</version>
                <configuration>
                    <ignores>java.lang.invoke.*</ignores>
		        </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <excludePackageNames>
                        *.internal:*.internal.introspection:*.parser:
                    </excludePackageNames>
                    <show>protected</show>
                </configuration>
            </plugin>

        </plugins>
    </build>

    <reporting>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <excludePackageNames>
                        *.internal:*.internal.introspection:*.parser:
                    </excludePackageNames>
                    <show>protected</show>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-changes-plugin</artifactId>
                <configuration>
                    <issueLinkTemplatePerSystem>
                        <default>%URL%/%ISSUE%</default>
                    </issueLinkTemplatePerSystem>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <configuration>
                    <configLocation>${basedir}/src/main/config/checkstyle.xml</configLocation>
                    <suppressionsLocation>${basedir}/src/main/config/checkstyle-suppressions.xml</suppressionsLocation>
                    <excludes>org/apache/commons/jexl3/parser/*.java</excludes>
                    <headerLocation>${basedir}/src/main/config/header.txt</headerLocation>
                    <enableRulesSummary>false</enableRulesSummary>
                    <!-- Needed to define config_loc for use by Eclipse -->
                    <propertyExpansion>config_loc=${basedir}/src/main/config</propertyExpansion>
                </configuration>
            </plugin>

            <plugin>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-maven-plugin</artifactId>
                <configuration>
                    <excludeFilterFile>${basedir}/src/main/config/findbugs-exclude-filter.xml</excludeFilterFile>
                    <xmlOutputDirectory>target/site</xmlOutputDirectory>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <configuration>
                    <targetJdk>${maven.compiler.target}</targetJdk>
                    <rulesets>
                        <ruleset>${project.basedir}/src/main/config/pmd.xml</ruleset>
                    </rulesets>
                    <excludes>
                        <exclude>org/apache/commons/jexl3/parser/Parser.java</exclude>
                        <exclude>org/apache/commons/jexl3/parser/AST*.java</exclude>
                        <exclude>org/apache/commons/jexl3/parser/ParserTokenManager.java</exclude>
                        <exclude>org/apache/commons/jexl3/parser/*Constants.java</exclude>
                        <exclude>org/apache/commons/jexl3/parser/AbstractCharStream.java</exclude>
                        <exclude>org/apache/commons/jexl3/parser/*Provider.java</exclude>
                    </excludes>
                </configuration>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>pmd</report>
                            <report>cpd</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>

            <plugin>
                <groupId>com.github.siom79.japicmp</groupId>
                <artifactId>japicmp-maven-plugin</artifactId>
                <configuration>
                    <parameter>
                        <includes>
                            <include>org.apache.commons.jexl3</include>
                            <include>org.apache.commons.jexl3.introspection</include>
                            <include>org.apache.commons.jexl3.scripting</include>
                        </includes>
                        <excludes>
                            <exclude>org.apache.commons.jexl3.internal</exclude>
                            <exclude>org.apache.commons.jexl3.internal.introspection</exclude>
                            <exclude>org.apache.commons.jexl3.parser</exclude>
                        </excludes>
                        <onlyModified>true</onlyModified>
                        <accessModifier>protected</accessModifier>
                        <ignoreMissingClasses>true</ignoreMissingClasses>
                        <breakBuildOnBinaryIncompatibleModifications>false</breakBuildOnBinaryIncompatibleModifications>
                        <breakBuildIfCausedByExclusion>false</breakBuildIfCausedByExclusion>
                    </parameter>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>.travis.yml</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>**/generated-sources/**/*</exclude>
                        <exclude>**/org/apache/commons/jexl3/parser/*.class</exclude>
                        <exclude>**/org/apache/commons/jexl3/**/*Test.class</exclude>
                    </excludes>
                </configuration>
            </plugin>

        </plugins>
    </reporting>

    <developers>
        <developer>
            <name>dIon Gillard</name>
            <id>dion</id>
            <email>dion AT apache DOT org</email>
            <organization>The Apache Software Foundation</organization>
        </developer>
        <developer>
            <name>Geir Magnusson Jr.</name>
            <id>geirm</id>
            <email>geirm AT apache DOT org</email>
            <organization>independent</organization>
        </developer>
        <developer>
            <name>Tim O'Brien</name>
            <id>tobrien</id>
            <email>tobrien AT apache DOT org</email>
            <organization>independent</organization>
        </developer>
        <developer>
            <name>Peter Royal</name>
            <id>proyal</id>
            <email>proyal AT apache DOT org</email>
            <organization>The Apache Software Foundation</organization>
        </developer>
        <developer>
            <name>James Strachan</name>
            <id>jstrachan</id>
            <email>jstrachan AT apache DOT org</email>
            <organization>SpiritSoft, Inc.</organization>
        </developer>
        <developer>
            <name>Rahul Akolkar</name>
            <id>rahul</id>
            <email>rahul AT apache DOT org</email>
            <organization>The Apache Software Foundation</organization>
        </developer>
        <developer>
            <name>Sebastian Bazley</name>
            <id>sebb</id>
            <email>sebb AT apache DOT org</email>
        </developer>
        <developer>
            <name>Henri Biestro</name>
            <id>henrib</id>
            <email>henrib AT apache DOT org</email>
        </developer>
    </developers>

    <contributors>
        <contributor>
            <name>Dmitri Blinov</name>
        </contributor>
    </contributors>

    <profiles>
        <profile>
            <id>java-module</id>
            <activation>
                <jdk>[9,)</jdk>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.moditect</groupId>
                        <artifactId>moditect-maven-plugin</artifactId>
                        <version>1.1.0</version>
                        <executions>
                            <execution>
                                <id>add-module-infos</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>add-module-info</goal>
                                </goals>
                                <configuration>
                                    <jvmVersion>9</jvmVersion>
                                    <overwriteExistingFiles>true</overwriteExistingFiles>
                                    <module>
                                        <moduleInfo>
                                            <name>${commons.module.name}</name>
                                            <exports>
                                                !org.apache.commons.jexl3.parser;
                                                !org.apache.commons.jexl3.internal*;
                                                *;
                                            </exports>
                                            <addServiceUses>true</addServiceUses>
                                        </moduleInfo>
                                    </module>
                                    <jdepsExtraArgs>
                                        <arg>--multi-release=9</arg>
                                    </jdepsExtraArgs>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
