<?xml version="1.0" encoding="UTF-8"?>
<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>
  <name>java</name>
  <description>java</description>
  <url>https://github.io.github.qsy7/java.git</url>
  <groupId>io.github.qsy7</groupId>
  <artifactId>java</artifactId>
  <version>0.1.2</version>
  <packaging>pom</packaging>
  <modules>
    <module>aspects</module>
    <module>configuration</module>
    <module>dependencies</module>
    <module>examples</module>
    <module>infrastructure</module>
    <module>modules</module>
  </modules>
  <dependencies>
    <dependency>
      <groupId>org.junit</groupId>
      <artifactId>junit-bom</artifactId>
      <version>${junit.jupiter.version}</version>
      <type>pom</type>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>${junit.jupiter.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <sourceDirectory>${src.directory}</sourceDirectory>
    <!--    <directory>/tmp/${env.USER}/maven</directory>-->
    <pluginManagement>
      <plugins>
        <!--        <plugin>-->
        <!--          <groupId>org.apache.maven.plugins</groupId>-->
        <!--          <artifactId>maven-failsafe-plugin</artifactId>-->
        <!--          &lt;!&ndash;<version>2.21.0</version>&ndash;&gt;-->
        <!--          <version>3.0.0-M5</version>-->
        <!--          <dependencies>-->
        <!--            <dependency>-->
        <!--              <groupId>org.junit.platform</groupId>-->
        <!--              <artifactId>junit-platform-surefire-provider</artifactId>-->
        <!--              <version>${junit.platform.version}</version>-->
        <!--            </dependency>-->
        <!--            &lt;!&ndash; Vintage engine only needed if JUnit 3/4 tests present &ndash;&gt;-->
        <!--&lt;!&ndash;            <dependency>&ndash;&gt;-->
        <!--&lt;!&ndash;              <groupId>org.junit.vintage</groupId>&ndash;&gt;-->
        <!--&lt;!&ndash;              <artifactId>junit-vintage-engine</artifactId>&ndash;&gt;-->
        <!--&lt;!&ndash;              <version>${junit.jupiter.version}</version>&ndash;&gt;-->
        <!--&lt;!&ndash;            </dependency>&ndash;&gt;-->
        <!--            <dependency>-->
        <!--              <groupId>org.junit.jupiter</groupId>-->
        <!--              <artifactId>junit-jupiter-engine</artifactId>-->
        <!--              <version>${junit.jupiter.version}</version>-->
        <!--            </dependency>-->
        <!--          </dependencies>-->
        <!--&lt;!&ndash;          <executions>&ndash;&gt;-->
        <!--&lt;!&ndash;            <execution>&ndash;&gt;-->
        <!--&lt;!&ndash;              <id>integration-test</id>&ndash;&gt;-->
        <!--&lt;!&ndash;              <goals>&ndash;&gt;-->
        <!--&lt;!&ndash;                <goal>integration-test</goal>&ndash;&gt;-->
        <!--&lt;!&ndash;              </goals>&ndash;&gt;-->
        <!--&lt;!&ndash;            </execution>&ndash;&gt;-->
        <!--&lt;!&ndash;          </executions>&ndash;&gt;-->
        <!--        </plugin>-->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>3.0.0-M5</version>
          <dependencies>
            <!--            <dependency>-->
            <!--              <groupId>org.junit.platform</groupId>-->
            <!--              <artifactId>junit-platform-surefire-provider</artifactId>-->
            <!--              <version>${junit.platform.version}</version>-->
            <!--            </dependency>-->
            <!--            <dependency>-->
            <!--              <groupId>me.fabriciorby</groupId>-->
            <!--              <artifactId>maven-surefire-junit5-tree-reporter</artifactId>-->
            <!--              <version>0.1.0</version>-->
            <!--            </dependency>-->
            <!--            <dependency>-->
            <!--              <groupId>org.junit.jupiter</groupId>-->
            <!--              <artifactId>junit-jupiter-engine</artifactId>-->
            <!--              <version>${junit.jupiter.version}</version>-->
            <!--            </dependency>-->
          </dependencies>
          <!--          <configuration>-->
          <!--            <reportFormat>plain</reportFormat>-->
          <!--            <consoleOutputReporter>-->
          <!--              <disable>true</disable>-->
          <!--            </consoleOutputReporter>-->
          <!--            <statelessTestsetInfoReporter implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5StatelessTestsetInfoTreeReporter"/>-->
          <!--          </configuration>-->
        </plugin>
        <plugin>
          <groupId>org.sonarsource.scanner.maven</groupId>
          <artifactId>sonar-maven-plugin</artifactId>
          <!--<version>3.5.0.1254</version>-->
          <version>3.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
      </plugin>
      <plugin>
        <inherited>true</inherited>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven.compiler.plugin.version}</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
          <!-- This breaks lombok -->
          <!--          <compilerArgument>-proc:none</compilerArgument>-->
          <compilerArguments>
            <endorseddirs>${endorsed.dir}</endorseddirs>
          </compilerArguments>
          <!--          <compilerArgs>-->
          <!--            &#45;&#45;enable-preview-->
          <!--          </compilerArgs>-->
        </configuration>
      </plugin>
      <plugin>
        <inherited>true</inherited>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.7</version>
        <executions>
          <execution>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>
          <execution>
            <id>report</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>report</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <!-- Mutation Coverage -->
      <plugin>
        <inherited>true</inherited>
        <groupId>org.pitest</groupId>
        <artifactId>pitest-maven</artifactId>
        <version>1.7.5</version>
        <configuration>
          <targetClasses>
            <param>io.github.qsy7.*</param>
          </targetClasses>
          <targetTests>
            <param>io.github.qsy7.*</param>
          </targetTests>
          <avoidCallsTo>
            <avoidCallTo>ch.qos.logback</avoidCallTo>
            <avoidCallTo>org.slf4j</avoidCallTo>
          </avoidCallsTo>
        </configuration>
      </plugin>
      <!-- https://stackoverflow.com/questions/770364/what-is-a-good-way-to-handle-a-version-number-in-a-java-application -->
      <!--
                              <plugin>
                          <artifactId>maven-scm-plugin</artifactId>
                          <executions>
                            <execution>
                              <id>getting-scm.revision</id>
                              <phase>validate</phase>
                              <goals>
                                <goal>update</goal>
                              </goals>
                            </execution>
                          </executions>
                        </plugin>
                        -->
      <!-- Project Structure -> Modules -> Click generated-sources folder (and make it a sources folder) -->
      <!-- https://stackoverflow.com/questions/5170620/unable-to-use-intellij-with-a-generated-sources-folder#5171035 -->
      <plugin>
        <inherited>true</inherited>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
          <execution>
            <id>test</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>${basedir}/target/generated-sources</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <!-- Automatically update dependencies, this does not obey Maven proxy settings -->
      <!-- manually run -->
      <plugin>
        <inherited>true</inherited>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>2.10.0</version>
        <configuration>
          <!-- only update external dependencies -->
          <excludes>
            <exclude>io.github.qsy7.*</exclude>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>pl.project13.maven</groupId>
        <artifactId>git-commit-id-plugin</artifactId>
        <version>4.9.10</version>
        <executions>
          <execution>
            <id>get-the-git-infos</id>
            <goals>
              <goal>revision</goal>
            </goals>
            <phase>validate</phase>
          </execution>
        </executions>
        <configuration>
          <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
        </configuration>
      </plugin>
      <plugin>
        <inherited>true</inherited>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.1.1</version>
        <configuration>
          <archive>
            <manifest>
              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
              <!--<Implementation-Version>${this.version}.${scm.revision}</Implementation-Version>-->
              <!--
                                                                    Package p = getClass().getPackage();
                                                                  String version = p.getImplementationVersion();
                                                                  -->
            </manifest>
            <manifestEntries>
              <Implementation-Version>${project.version}</Implementation-Version>
              <Implementation-Build>${project.version}.${git.commit.id.abbrev}</Implementation-Build>
            </manifestEntries>
          </archive>
          <resources>
            <entityReference>
              <directory>src/main/java</directory>
              <includes>
                <include>**/*properties</include>
              </includes>
            </entityReference>
          </resources>
        </configuration>
      </plugin>
    </plugins>
    <resources>
      <resource>
        <directory>${project.basedir}/src/main/resources</directory>
        <includes>
          <include>**/*</include>
        </includes>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>${project.basedir}/src/test/resources</directory>
      </testResource>
    </testResources>
  </build>
  <reporting>
    <plugins>
      <plugin>
        <inherited>true</inherited>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <!-- select non-aggregate reports -->
              <report>report</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <!--      <plugin>-->
      <!--        <inherited>true</inherited>-->
      <!--        <groupId>org.apache.maven.plugins</groupId>-->
      <!--        <artifactId>maven-javadoc-plugin</artifactId>-->
      <!--        <version>${maven.javadoc.plugin.version}</version>-->
      <!--        <configuration>-->
      <!--          <doclet>org.umlgraph.doclet.UmlGraphDoc</doclet>-->
      <!--          <docletArtifact>-->
      <!--            <groupId>org.umlgraph</groupId>-->
      <!--            <artifactId>doclet</artifactId>-->
      <!--            <version>5.6.6</version>-->
      <!--          </docletArtifact>-->
      <!--          <show>private</show>-->
      <!--          <additionalparam>-all -constructors</additionalparam>-->
      <!--          <useStandardDocletOptions>false</useStandardDocletOptions>-->
      <!--        </configuration>-->
      <!--      </plugin>-->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>${findbugs.version}</version>
      </plugin>
    </plugins>
  </reporting>
  <licenses>
    <license>
      <name>The 3-Clause BSD License</name>
      <url>https://opensource.org/licenses/BSD-3-Clause</url>
    </license>
  </licenses>
  <developers>
    <developer>
      <name>qsy7</name>
      <email>3DS55XDy@gmail.com</email>
      <organization>io.github/qsy7</organization>
      <organizationUrl>http://github.com/qsy7</organizationUrl>
    </developer>
  </developers>
  <scm>
    <connection>scm:git:ssh://git@localhost:/projects/active/github.com/java.git</connection>
    <developerConnection>scm:git:ssh://git@localhost:/projects/active/github.com/java.git</developerConnection>
    <url>https://github.io.github.qsy7/java.git</url>
  </scm>
  <distributionManagement>
    <snapshotRepository>
      <id>ossrh</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
    <repository>
      <id>ossrh</id>
      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
  </distributionManagement>
  <properties>
    <java.version>11</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <maven.javadoc.plugin.version>3.1.1</maven.javadoc.plugin.version>
    <!--<maven.compiler.plugin.version>3.5</maven.compiler.plugin.version>-->
    <!--<maven.compiler.plugin.version>3.8.0</maven.compiler.plugin.version>-->
    <maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
    <sonar.maven.plugin.version>3.2</sonar.maven.plugin.version>
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!--<junit.version>4.12</junit.version>-->
    <findbugs.version>3.0.5</findbugs.version>
    <hibernate.version>6.0.0.Alpha3</hibernate.version>
    <jaxb.version>2.3.0</jaxb.version>
    <javax.activation.version>1.2.0</javax.activation.version>
    <junit.jupiter.version>5.8.2</junit.jupiter.version>
    <junit.platform.version>1.3.2</junit.platform.version>
    <application.environment>Development</application.environment>
    <lombok.version>1.18.22</lombok.version>
    <src.directory>src/main/java</src.directory>
    <lombok.log.fieldName>LOGGER</lombok.log.fieldName>
    <!--<external.build.root>/tmp/${env.USER}/maven</external.build.root>-->
    <!--<maven.build.directory>/tmp/${env.USER}/maven</maven.build.directory>-->
  </properties>
  <profiles>
    <profile>
      <id>deploy</id>
      <activation>
        <file>
          <exists>/tmp/${env.USER}/.deploy</exists>
        </file>
      </activation>
      <build>
        <!-- This works -->
        <!--        <directory>/tmp/${env.USER}/maven</directory>-->
        <plugins>
          <plugin>
            <groupId>com.github.danielflower.mavenplugins</groupId>
            <artifactId>multi-module-maven-release-plugin</artifactId>
            <version>3.5.8</version>
            <configuration>
              <releaseGoals>
                <releaseGoal>deploy</releaseGoal>
              </releaseGoals>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.5.3</version>
            <configuration>
              <localCheckout>true</localCheckout>
              <pushChanges>false</pushChanges>
              <mavenExecutorId>forked-path</mavenExecutorId>
              <autoVersionSubmodules>true</autoVersionSubmodules>
              <arguments>-Dmaven.test.skipTests=true -Dmaven.test.skip=true</arguments>
              <skip>true</skip>
              <skipTests>true</skipTests>
              <!--              <preparationGoals>clean validate</preparationGoals>-->
            </configuration>
            <dependencies>
              <dependency>
                <groupId>org.apache.maven.scm</groupId>
                <artifactId>maven-scm-provider-gitexe</artifactId>
                <version>1.12.0</version>
              </dependency>
            </dependencies>
            <!--
                                                                            <executions>
                                                                                <execution>
                                                                                    <phase>clean</phase>
                                                                                    <id>set-release-versions</id>
                                                                                    <goals>
                                                                                        <goal>update-versions</goal>
                                                                                    </goals>
                                                                                    <configuration>
                                                                                        <autoVersionSubmodules>true</autoVersionSubmodules>
                                                                                    </configuration>
                                                                                </execution>
                                                                            </executions>
                                                            -->
          </plugin>
          <plugin>
            <groupId>org.sonatype.plugins</groupId>
            <artifactId>nexus-staging-maven-plugin</artifactId>
            <version>1.6.8</version>
            <extensions>true</extensions>
            <configuration>
              <serverId>ossrh</serverId>
              <nexusUrl>https://oss.sonatype.org/</nexusUrl>
              <autoReleaseAfterClose>true</autoReleaseAfterClose>
              <!-- with a large project, we need a higher number here -->
              <stagingProgressTimeoutMinutes>60</stagingProgressTimeoutMinutes>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.2.1</version>
            <executions>
              <execution>
                <id>attach-sources</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok-maven-plugin</artifactId>
            <version>1.18.20.0</version>
            <executions>
              <execution>
                <phase>generate-sources</phase>
                <goals>
                  <goal>delombok</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <addOutputDirectory>false</addOutputDirectory>
              <sourceDirectory>src/main/java</sourceDirectory>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>3.3.1</version>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <!--                <phase>package</phase>-->
                <phase>process-resources</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
            <!-- 2019/11/26 - temporarily disabled until I figure out how to handle lombok ... -->
            <configuration>
              <!--              <excludePackageNames>io.github.qsy7.*,java.jpametamodel.*</excludePackageNames>-->
              <excludePackageNames>java.jpametamodel.*</excludePackageNames>
              <!-- delombok first -->
              <sourcepath>target/generated-sources/delombok</sourcepath>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <version>3.0.1</version>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
                <configuration>
                  <gpgArguments>
                    <arg>--pinentry-mode</arg>
                    <arg>loopback</arg>
                  </gpgArguments>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <!--<plugin>-->
          <!--<groupId>org.codehaus.mojo</groupId>-->
          <!--<artifactId>buildnumber-maven-plugin</artifactId>-->
          <!--<version>1.4</version>-->
          <!--<executions>-->
          <!--<execution>-->
          <!--<phase>validate</phase>-->
          <!--<goals>-->
          <!--<goal>create</goal>-->
          <!--</goals>-->
          <!--</execution>-->
          <!--</executions>-->
          <!--<configuration>-->
          <!--<doCheck>true</doCheck>-->
          <!--<doUpdate>false</doUpdate>-->
          <!--</configuration>-->
          <!--</plugin>-->
        </plugins>
      </build>
      <properties>
        <src.directory>target/generated-sources/delombok</src.directory>
      </properties>
    </profile>
    <profile>
      <id>error-prone</id>
      <build>
        <pluginManagement>
          <plugins>
            <!-- Use Google Error Prone to perform static code analysis -->
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>${maven.compiler.plugin.version}</version>
              <configuration>
                <release>${java.version}</release>
                <!--                <compilerId>javac-with-errorprone</compilerId>-->
                <!--                <forceJavacCompilerUse>true</forceJavacCompilerUse>-->
                <!--                <useIncrementalCompilation>false</useIncrementalCompilation>-->
                <!--                <source>${java.version}</source>-->
                <!--                <target>${java.version}</target>-->
                <!--                &lt;!&ndash;-->
                <!--                                                    <compilerArgs>-->
                <!--                                                      <arg>- -add-modules</arg>-->
                <!--                                                      <arg>java.sql</arg>-->
                <!--                                                    </compilerArgs>-->
                <!--                                                    &ndash;&gt;-->
                <!--                <compilerArgs>-->
                <!--                  <arg>-Xep:ParameterName:OFF</arg>-->
                <!--                </compilerArgs>-->
                <!--                <compilerArguments>-->
                <!--                  <endorseddirs>${endorsed.dir}</endorseddirs>-->
                <!--                </compilerArguments>-->
                <includes>
                  <!--<include>src/main/java/**/*.java</include>-->
                  <include>target/generated-sources/delombok/**/*.java</include>
                </includes>
                <excludes>
                  <exclude>src/main/java/**/*.java</exclude>
                </excludes>
              </configuration>
              <!--              <dependencies>-->
              <!--                <dependency>-->
              <!--                  <groupId>org.codehaus.plexus</groupId>-->
              <!--                  <artifactId>plexus-compiler-javac-errorprone</artifactId>-->
              <!--                  <version>2.8.4</version>-->
              <!--                </dependency>-->
              <!--                &lt;!&ndash; override plexus-compiler-javac-errorprone's dependency on-->
              <!--                                        Error Prone with the latest version &ndash;&gt;-->
              <!--                <dependency>-->
              <!--                  <groupId>com.google.errorprone</groupId>-->
              <!--                  <artifactId>error_prone_core</artifactId>-->
              <!--                  <version>2.3.1</version>-->
              <!--                </dependency>-->
              <!--              </dependencies>-->
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
    <!-- JPA2 support -->
    <profile>
      <id>jpa2</id>
      <activation>
        <file>
          <exists>.jpa2</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.bsc.maven</groupId>
            <artifactId>maven-processor-plugin</artifactId>
            <version>3.3.3</version>
            <executions>
              <execution>
                <id>process</id>
                <goals>
                  <goal>process</goal>
                </goals>
                <phase>generate-sources</phase>
                <configuration>
                  <!-- source output directory -->
                  <outputDirectory>${project.build.directory}/generated-sources/java/jpametamodel</outputDirectory>
                  <processors>
                    <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
                  </processors>
                  <overwrite>true</overwrite>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>org.hibernate.orm</groupId>
                <artifactId>hibernate-jpamodelgen</artifactId>
                <version>${hibernate.version}</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
      <dependencies>
        <dependency>
          <groupId>javax.annotation</groupId>
          <artifactId>jsr250-api</artifactId>
          <version>1.0</version>
        </dependency>
      </dependencies>
    </profile>
    <profile>
      <id>enforce-dependencies</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
              <rules>
                <dependencyConvergence/>
              </rules>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.3.0</version>
            <executions>
              <execution>
                <id>analyze</id>
                <goals>
                  <goal>analyze-only</goal>
                </goals>
                <configuration>
                  <failOnWarning>true</failOnWarning>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>executable-jar</id>
      <activation>
        <file>
          <exists>src/main/resources/simplelogger.properties</exists>
        </file>
      </activation>
      <dependencies>
        <dependency>
          <groupId>io.github.qsy7.java.dependencies</groupId>
          <artifactId>slf4j-simple</artifactId>
          <version>0.1.2</version>
          <type>pom</type>
        </dependency>
        <dependency>
          <groupId>io.github.qsy7.java.infrastructure.inject.modules.cli</groupId>
          <artifactId>api</artifactId>
          <version>0.1.2</version>
        </dependency>
      </dependencies>
      <build>
        <!--<sourceDirectory>target/generated-sources/delombok/**/*.java</sourceDirectory>-->
        <plugins>
          <!-- When this plugin is installed at the parent pom level, it messes up the classes -->
          <plugin>
            <groupId>org.codehaus.gmavenplus</groupId>
            <artifactId>gmavenplus-plugin</artifactId>
            <version>1.6</version>
            <executions>
              <execution>
                <!--<phase>generate-resources</phase>-->
                <!--<phase>prepare-package</phase>-->
                <!-- works fine, but the current project fails to generate any reflections as a result when unit testing-->
                <phase>process-classes</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <!--
              <sources>
                <source>
                  <directory>${project.basedir}/target/generated-sources/delombok</directory>
                  <includes>
                    <include>**/*.java</include>
                  </includes>
                </source>
              </sources>
              -->
              <scripts>
                <script><![CDATA[
            new org.reflections.Reflections(
			new org.reflections.util.ConfigurationBuilder().forPackage("io.github.qsy7")
			.setScanners(org.reflections.scanners.Scanners.values()))
			.save("${project.build.outputDirectory}/META-INF/reflections/${project.groupId}-${project.artifactId}-reflections.xml")
          ]]></script>
              </scripts>
            </configuration>
            <dependencies>
              <dependency>
                <groupId>org.codehaus.groovy</groupId>
                <artifactId>groovy-all</artifactId>
                <version>2.4.12</version>
                <scope>runtime</scope>
              </dependency>
              <dependency>
                <groupId>org.reflections</groupId>
                <artifactId>reflections</artifactId>
                <version>0.10.2</version>
              </dependency>
              <!-- When writing XML, this is required -->
              <dependency>
                <groupId>org.dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>2.1.3</version>
              </dependency>
            </dependencies>
          </plugin>
          <!-- Prepare DDL -->
          <!--<plugin>-->
          <!--<groupId>org.codehaus.gmavenplus</groupId>-->
          <!--<artifactId>gmavenplus-plugin</artifactId>-->
          <!--<version>1.6</version>-->
          <!--<executions>-->
          <!--<execution>-->
          <!--<phase>verify</phase>-->
          <!--<goals>-->
          <!--<goal>execute</goal>-->
          <!--</goals>-->
          <!--</execution>-->
          <!--</executions>-->
          <!--<configuration>-->
          <!--<scripts>-->
          <!--<script><![CDATA[-->
          <!--]]></script>-->
          <!--</scripts>-->
          <!--</configuration>-->
          <!--<dependencies>-->
          <!--<dependency>-->
          <!--<groupId>org.codehaus.groovy</groupId>-->
          <!--<artifactId>groovy-all</artifactId>-->
          <!--<version>2.4.12</version>-->
          <!--<scope>runtime</scope>-->
          <!--</dependency>-->
          <!--<dependency>-->
          <!--<groupId>io.github.qsy7.java.infrastructure.datastore.modules</groupId>-->
          <!--<artifactId>jpa-ddl</artifactId>-->
          <!--<version>0.0.15-SNAPSHOT</version>-->
          <!--</dependency>-->
          <!--</dependencies>-->
          <!--</plugin>-->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
              <!--<classpathLayoutType>repository</classpathLayoutType>-->
              <!--<classpathLayoutType>simple</classpathLayoutType>-->
              <!--<useRepositoryLayout>true</useRepositoryLayout>-->
              <archive>
                <manifest>
                  <classpathLayoutType>repository</classpathLayoutType>
                  <addClasspath>true</addClasspath>
                  <classpathPrefix>lib/</classpathPrefix>
                  <mainClass>io.github.qsy7.inject.cli.CLIApplication</mainClass>
                </manifest>
                <manifestEntries>
                  <ApplicationEnvironment>${application.environment}</ApplicationEnvironment>
                  <ApplicationSCMVersion>${git.commit.id.abbrev}</ApplicationSCMVersion>
                </manifestEntries>
              </archive>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.3.0</version>
            <executions>
              <execution>
                <id>copy</id>
                <phase>install</phase>
                <goals>
                  <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                  <!--<prependGroupId>true</prependGroupId>-->
                  <useRepositoryLayout>true</useRepositoryLayout>
                  <outputDirectory>${project.build.directory}/lib</outputDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
      <properties>
        <application.environment>Development</application.environment>
      </properties>
    </profile>
    <profile>
      <id>agent</id>
      <activation>
        <file>
          <exists>.agent</exists>
        </file>
      </activation>
      <dependencies>
        <dependency>
          <groupId>io.github.qsy7.java.dependencies</groupId>
          <artifactId>slf4j-simple</artifactId>
          <version>0.1.2</version>
          <type>pom</type>
        </dependency>
        <dependency>
          <groupId>io.github.qsy7.java.infrastructure.inject.modules.cli</groupId>
          <artifactId>agent</artifactId>
          <version>0.1.2</version>
        </dependency>
      </dependencies>
      <build>
        <!--<sourceDirectory>target/generated-sources/delombok/**/*.java</sourceDirectory>-->
        <plugins>
          <!-- When this plugin is installed at the parent pom level, it messes up the classes -->
          <plugin>
            <groupId>org.codehaus.gmavenplus</groupId>
            <artifactId>gmavenplus-plugin</artifactId>
            <version>1.6</version>
            <executions>
              <execution>
                <phase>process-classes</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <scripts>
                <script><![CDATA[
            new org.reflections.Reflections(
			new org.reflections.util.ConfigurationBuilder().forPackage("io.github.qsy7")
			.setScanners(org.reflections.scanners.Scanners.values()))
			.save("${project.build.outputDirectory}/META-INF/reflections/${project.groupId}-${project.artifactId}-reflections.xml")
          ]]></script>
              </scripts>
            </configuration>
            <dependencies>
              <dependency>
                <groupId>org.codehaus.groovy</groupId>
                <artifactId>groovy-all</artifactId>
                <version>2.4.12</version>
                <scope>runtime</scope>
              </dependency>
              <dependency>
                <groupId>org.reflections</groupId>
                <artifactId>reflections</artifactId>
                <version>0.10.2</version>
              </dependency>
              <dependency>
                <groupId>org.dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>2.1.3</version>
              </dependency>
            </dependencies>
          </plugin>
          <!--          <plugin>-->
          <!--            <groupId>org.apache.maven.plugins</groupId>-->
          <!--            <artifactId>maven-shade-plugin</artifactId>-->
          <!--            <executions>-->
          <!--              <execution>-->
          <!--                <goals>-->
          <!--                  <goal>shade</goal>-->
          <!--                </goals>-->
          <!--                <configuration>-->
          <!--                  <shadedArtifactAttached>true</shadedArtifactAttached>-->
          <!--                  <transformers>-->
          <!--                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">-->
          <!--                      <manifestEntries>-->
          <!--                        <Premain-Class>io.github.qsy7.inject.cli.AgentCLIApplication</Premain-Class>-->
          <!--                        <ApplicationEnvironment>${application.environment}</ApplicationEnvironment>-->
          <!--                        <ApplicationSCMVersion>${git.commit.id.abbrev}</ApplicationSCMVersion>-->
          <!--                        <Can-Redefine-Classes>false</Can-Redefine-Classes>-->
          <!--                        <Can-Retransform-Classes>true</Can-Retransform-Classes>-->
          <!--                      </manifestEntries>-->
          <!--                    </transformer>-->
          <!--                  </transformers>-->
          <!--                </configuration>-->
          <!--              </execution>-->
          <!--            </executions>-->
          <!--          </plugin>-->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
              <archive>
                <manifest>
                  <addClasspath>true</addClasspath>
                  <classpathPrefix>lib/</classpathPrefix>
                  <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                  <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                </manifest>
                <manifestEntries>
                  <Implementation-Version>${project.version}</Implementation-Version>
                  <Implementation-Build>${project.version}.${git.commit.id.abbrev}</Implementation-Build>
                  <Premain-Class>io.github.qsy7.inject.cli.AgentCLIApplication</Premain-Class>
                  <ApplicationEnvironment>${application.environment}</ApplicationEnvironment>
                  <ApplicationSCMVersion>${git.commit.id.abbrev}</ApplicationSCMVersion>
                  <Can-Redefine-Classes>false</Can-Redefine-Classes>
                  <Can-Retransform-Classes>true</Can-Retransform-Classes>
                </manifestEntries>
              </archive>
              <!--              <resources>-->
              <!--                <entityReference>-->
              <!--                  <directory>src/main/java</directory>-->
              <!--                  <includes>-->
              <!--                    <include>**/*properties</include>-->
              <!--                  </includes>-->
              <!--                </entityReference>-->
              <!--              </resources>-->
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- Compile Time Byte-Code Manipulation -->
    <profile>
      <id>aspects</id>
      <activation>
        <file>
          <exists>.aspects</exists>
        </file>
      </activation>
      <dependencies>
        <!-- Aspects (now Byte Buddy) -->
        <dependency>
          <groupId>io.github.qsy7.java.aspects.delay</groupId>
          <artifactId>api</artifactId>
          <version>0.1.2</version>
        </dependency>
        <dependency>
          <groupId>io.github.qsy7.java.aspects.heartbeat</groupId>
          <artifactId>api</artifactId>
          <version>0.1.2</version>
        </dependency>
        <dependency>
          <groupId>io.github.qsy7.java.aspects</groupId>
          <artifactId>closeable</artifactId>
          <version>0.1.2</version>
        </dependency>
        <dependency>
          <groupId>io.github.qsy7.java.aspects.logging</groupId>
          <artifactId>api</artifactId>
          <version>0.1.2</version>
        </dependency>
        <dependency>
          <groupId>io.github.qsy7.java.aspects.timeout</groupId>
          <artifactId>api</artifactId>
          <version>0.1.2</version>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy-maven-plugin</artifactId>
            <version>1.11.19</version>
            <executions>
              <execution>
                <goals>
                  <goal>transform</goal>
                </goals>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>io.github.qsy7.java.aspects.delay</groupId>
                <artifactId>plugin</artifactId>
                <version>0.1.2</version>
              </dependency>
              <dependency>
                <groupId>io.github.qsy7.java.aspects.heartbeat</groupId>
                <artifactId>plugin</artifactId>
                <version>0.1.2</version>
              </dependency>
              <dependency>
                <groupId>io.github.qsy7.java.aspects</groupId>
                <artifactId>closeable</artifactId>
                <version>0.1.2</version>
              </dependency>
              <dependency>
                <groupId>io.github.qsy7.java.aspects.logging</groupId>
                <artifactId>plugin</artifactId>
                <version>0.1.2</version>
              </dependency>
              <dependency>
                <groupId>io.github.qsy7.java.aspects.timeout</groupId>
                <artifactId>plugin</artifactId>
                <version>0.1.2</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>lombok</id>
      <activation>
        <file>
          <missing>.no-lombok</missing>
        </file>
      </activation>
      <dependencies>
        <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>${lombok.version}</version>
          <scope>provided</scope>
        </dependency>
      </dependencies>
    </profile>
  </profiles>
</project>
