<?xml version="1.0" encoding="UTF-8"?>
<!--
The MIT License (MIT)

Copyright (c) 2016-2024 Objectionary.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-->
<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>com.jcabi</groupId>
    <artifactId>parent</artifactId>
    <version>0.68.0</version>
  </parent>
  <groupId>org.eolang</groupId>
  <artifactId>jeo-maven-plugin</artifactId>
  <packaging>maven-plugin</packaging>
  <version>0.6.21</version>
  <name>jeo</name>
  <url>https://objectionary.github.io/jeo-maven-plugin</url>
  <description>Optimisation of Java Bytecode via EOLANG</description>
  <inceptionYear>2023</inceptionYear>
  <organization>
    <name>EO</name>
    <url>https://github.com/objectionary/eo</url>
  </organization>
  <licenses>
    <license>
      <name>MIT</name>
      <url>https://www.eolang.org/LICENSE.txt</url>
      <distribution>site</distribution>
    </license>
  </licenses>
  <developers>
    <developer>
      <id>1</id>
      <name>Volodya Lombrozo</name>
      <email>volodya.lombrozo@gmail.com</email>
      <organization>open-source</organization>
      <roles>
        <role>Architect</role>
        <role>Developer</role>
      </roles>
      <timezone>+3</timezone>
    </developer>
  </developers>
  <issueManagement>
    <system>GitHub</system>
    <url>https://github.com/objectionary/jeo-maven-plugin/issues</url>
  </issueManagement>
  <scm>
    <connection>scm:git:git@github.com:objectionary/jeo-maven-plugin.git
    </connection>
    <developerConnection>
      scm:git:git@github.com:objectionary/jeo-maven-plugin.git
    </developerConnection>
    <url>https://github.com/objectionary/jeo-maven-plugin</url>
  </scm>
  <ciManagement>
    <system>rultor</system>
    <url>https://www.rultor.com</url>
  </ciManagement>
  <distributionManagement>
    <site>
      <id>github-pages</id>
      <url>https://github.com/objectionary/jeo-maven-plugin</url>
    </site>
  </distributionManagement>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <stack-size>256M</stack-size>
    <skipITs/>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.ow2.asm</groupId>
      <artifactId>asm</artifactId>
      <version>9.7.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.ow2.asm</groupId>
      <artifactId>asm-util</artifactId>
      <version>9.7.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.jcabi.incubator</groupId>
      <artifactId>xembly</artifactId>
      <version>0.31.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.jcabi</groupId>
      <artifactId>jcabi-xml</artifactId>
      <version>0.30.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.jcabi</groupId>
      <artifactId>jcabi-manifests</artifactId>
      <!-- version from parent POM -->
    </dependency>
    <dependency>
      <groupId>org.cactoos</groupId>
      <artifactId>cactoos</artifactId>
      <version>0.56.1</version>
    </dependency>
    <dependency>
      <groupId>net.sf.saxon</groupId>
      <artifactId>Saxon-HE</artifactId>
      <version>12.5</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>4.0.0-alpha-7</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-model</artifactId>
      <version>3.9.9</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-core</artifactId>
      <version>3.9.9</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.plugin-tools</groupId>
      <artifactId>maven-plugin-annotations</artifactId>
      <version>3.15.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>2.0.16</version>
    </dependency>
    <!--
      Warning!
      We use the 1.3.14 version of logback intentionally.
      Recent versions of the dependency are incompatible with Java 8.
      So, don't change this version without a necessity.
    -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.3.14</version>
    </dependency>
    <dependency>
      <groupId>com.jcabi</groupId>
      <artifactId>jcabi-log</artifactId>
      <version>0.24.3</version>
    </dependency>
    <dependency>
      <groupId>org.eolang</groupId>
      <artifactId>eo-parser</artifactId>
      <version>0.42.0</version>
    </dependency>
    <dependency>
      <groupId>com.github.volodya-lombrozo</groupId>
      <artifactId>jsmith</artifactId>
      <version>0.0.3</version>
    </dependency>
    <dependency>
      <groupId>com.yegor256</groupId>
      <artifactId>jhome</artifactId>
      <version>0.0.5</version>
    </dependency>
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest</artifactId>
      <!-- version from the parent pom -->
      <!-- compile scope required for sharing matchers -->
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.jcabi</groupId>
      <artifactId>jcabi-matchers</artifactId>
      <!-- version from the parent pom -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <!-- version from the parent pom -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-params</artifactId>
      <!-- version from the parent pom -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <!-- version from the parent pom -->
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eolang</groupId>
      <artifactId>jucs</artifactId>
      <version>0.2.0</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <testResources>
      <testResource>
        <directory>src/test/resources</directory>
        <filtering>false</filtering>
        <includes>
          <include>**/*.class</include>
          <include>**/*.java</include>
          <include>**/*.eo</include>
          <include>**/*.yaml</include>
          <include>**/*.xmir</include>
          <include>**/*.MF</include>
        </includes>
      </testResource>
    </testResources>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <executions>
          <execution>
            <id>default-compile</id>
            <phase>none</phase>
          </execution>
          <execution>
            <id>default-testCompile</id>
            <phase>none</phase>
          </execution>
          <execution>
            <id>java-compile</id>
            <phase>compile</phase>
            <goals>
              <goal>compile</goal>
            </goals>
            <configuration>
              <excludes>
                <exclude>**/HelpMojo.java</exclude>
              </excludes>
            </configuration>
          </execution>
          <execution>
            <id>java-test-compile</id>
            <phase>test-compile</phase>
            <goals>
              <goal>testCompile</goal>
            </goals>
            <configuration>
              <compilerArgument>-Xlint:-processing</compilerArgument>
            </configuration>
          </execution>
          <execution>
            <id>compile-helpmojo</id>
            <goals>
              <goal>compile</goal>
            </goals>
            <configuration>
              <release>8</release>
              <includes>
                <include>**/HelpMojo.java</include>
              </includes>
              <failOnWarning>false</failOnWarning>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-invoker-plugin</artifactId>
        <configuration>
          <!--
            The 'spring-fat' integration test is disabled in the default profile.
            It's done intentionally to speed up the build process. However, this
            test is still available in the 'long' profile. So if you want to run
            it, you can use the following command:
            mvn clean install -Plong
          -->
          <pomExcludes>
            <exclude>spring-fat/pom.xml</exclude>
          </pomExcludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.4.2</version>
        <configuration>
          <archive>
            <index>true</index>
            <manifestEntries>
              <JEO-Version>${project.version}</JEO-Version>
              <JEO-Title>${project.name}</JEO-Title>
              <JEO-Vendor>${project.organization.name}</JEO-Vendor>
              <JEO-Revision>${buildNumber}</JEO-Revision>
              <JEO-Dob>${timestamp}</JEO-Dob>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-plugin-plugin</artifactId>
        <configuration>
          <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>helpmojo</goal>
              <goal>descriptor</goal>
            </goals>
          </execution>
          <execution>
            <id>mojo-descriptor</id>
            <goals>
              <goal>descriptor</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>qulice</id>
      <build>
        <plugins>
          <plugin>
            <groupId>com.qulice</groupId>
            <artifactId>qulice-maven-plugin</artifactId>
            <version>${qulice.version}</version>
            <configuration>
              <license>file:${basedir}/LICENSE.txt</license>
              <excludes>
                <exclude>checkstyle:.*/BytecodeInstruction.java</exclude>
                <exclude>pmd:/src/test/resources/.*</exclude>
                <exclude>pmd:/src/it/.*</exclude>
                <exclude>checkstyle:/src/site/.*</exclude>
                <exclude>checkstyle:/src/test/resources/.*</exclude>
                <exclude>checkstyle:/src/main/resources/.*</exclude>
                <exclude>checkstyle:/src/it/.*</exclude>
                <exclude>duplicatefinder:.*</exclude>
                <!--
                  @todo #30:30min Enable dependency check.
                    The qulice library has an issue related to dependency check.
                    You can find more details here:
                    - https://github.com/yegor256/qulice/issues/1145
                    When this issue is fixed, we should enable dependency check.
                    Don't forget to remove the exclude below and this puzzle.
                -->
                <exclude>dependencies:.*</exclude>
              </excludes>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>check</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>com.github.volodya-lombrozo</groupId>
            <artifactId>jtcop-maven-plugin</artifactId>
            <version>1.3.1</version>
            <executions>
              <execution>
                <phase>verify</phase>
                <goals>
                  <goal>check</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.12</version>
            <configuration>
              <output>
                file
              </output>
            </configuration>
            <executions>
              <execution>
                <id>jacoco-initialize</id>
                <goals>
                  <goal>prepare-agent</goal>
                </goals>
              </execution>
              <execution>
                <id>jacoco-initialize-integration</id>
                <goals>
                  <goal>prepare-agent-integration</goal>
                </goals>
              </execution>
              <execution>
                <id>jacoco-check</id>
                <goals>
                  <goal>check</goal>
                </goals>
                <configuration>
                  <rules>
                    <rule>
                      <element>BUNDLE</element>
                      <limits>
                        <limit>
                          <counter>INSTRUCTION</counter>
                          <value>COVEREDRATIO</value>
                          <minimum>0.65</minimum>
                        </limit>
                        <limit>
                          <counter>LINE</counter>
                          <value>COVEREDRATIO</value>
                          <minimum>0.68</minimum>
                        </limit>
                        <limit>
                          <counter>BRANCH</counter>
                          <value>COVEREDRATIO</value>
                          <minimum>0.39</minimum>
                        </limit>
                        <limit>
                          <counter>COMPLEXITY</counter>
                          <value>COVEREDRATIO</value>
                          <minimum>0.53</minimum>
                        </limit>
                        <limit>
                          <counter>METHOD</counter>
                          <value>COVEREDRATIO</value>
                          <minimum>0.62</minimum>
                        </limit>
                        <limit>
                          <counter>CLASS</counter>
                          <value>MISSEDCOUNT</value>
                          <maximum>21</maximum>
                        </limit>
                      </limits>
                    </rule>
                  </rules>
                </configuration>
              </execution>
              <execution>
                <id>report</id>
                <phase>prepare-package</phase>
                <goals>
                  <goal>report</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>quliceJava11</id>
      <activation>
        <jdk>[11,)</jdk>
      </activation>
      <properties>
        <qulice.version>0.23.0</qulice.version>
      </properties>
    </profile>
    <profile>
      <id>quliceJava8</id>
      <activation>
        <jdk>1.8</jdk>
      </activation>
      <properties>
        <qulice.version>0.22.1</qulice.version>
      </properties>
    </profile>
    <profile>
      <id>long</id>
      <!--
        This profile is used to run integration tests that take a long time.
        For example, the 'spring-fat' integration test is disabled in the default
        profile.
      -->
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-invoker-plugin</artifactId>
            <configuration combine.self="override">
              <!--
                All integration tests are enabled in the 'long' profile.
              -->
              <pomExcludes/>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
