<?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>
    <parent>
        <groupId>io.github.heyuch</groupId>
        <artifactId>java-parent</artifactId>
        <version>1.0.0</version>
    </parent>

    <artifactId>parent-pom</artifactId>
    <version>1.0.2</version>
    <packaging>pom</packaging>

    <properties>
        <!-- 构建配置 -->
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.testTarget>1.8</maven.compiler.testTarget>
        <maven.compiler.testSource>1.8</maven.compiler.testSource>
        <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ssZ</maven.build.timestamp.format>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.build.resourceEncoding>UTF-8</project.build.resourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- 构建插件属性 -->
        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
        <maven-compiler-plugin.showDeprecation>false</maven-compiler-plugin.showDeprecation>
        <maven-compiler-plugin.showWarnings>false</maven-compiler-plugin.showWarnings>
        <maven-compiler-plugin.optimize>true</maven-compiler-plugin.optimize>
        <maven-compiler-plugin.debug>false</maven-compiler-plugin.debug>
        <maven-compiler-plugin.useIncrementalCompilation>false</maven-compiler-plugin.useIncrementalCompilation>
        <maven-dependency-plugin.version>3.1.2</maven-dependency-plugin.version>
        <maven-dependency-plugin.failOnWarning>false</maven-dependency-plugin.failOnWarning>
        <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
        <maven-surefire-plugin.version>3.0.0-M4</maven-surefire-plugin.version>

        <!-- 代码风格插件 -->
        <spotless-maven-plugin.version>2.26.0</spotless-maven-plugin.version>
        <checkstyle-maven-plugin.version>3.2.0</checkstyle-maven-plugin.version>
        <rewrite-maven-plugin.version>4.42.0</rewrite-maven-plugin.version>
        <build-utils.version>1.0.0</build-utils.version>
    </properties>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler-plugin.version}</version>
                    <configuration>
                        <optimize>${maven-compiler-plugin.optimize}</optimize>
                        <debug>${maven-compiler-plugin.debug}</debug>
                        <showDeprecation>${maven-compiler-plugin.showDeprecation}</showDeprecation>
                        <showWarnings>${maven-compiler-plugin.showWarnings}</showWarnings>
                        <useIncrementalCompilation>${maven-compiler-plugin.useIncrementalCompilation}</useIncrementalCompilation>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>${maven-dependency-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>analyze</id>
                            <goals>
                                <goal>analyze-only</goal>
                            </goals>
                            <configuration>
                                <failOnWarning>${maven-dependency-plugin.failOnWarning}</failOnWarning>
                                <scriptableOutput>true</scriptableOutput>
                                <ignoredUnusedDeclaredDependencies>
                                    <ignoredUnusedDeclaredDependency>org.projectlombok:lombok::</ignoredUnusedDeclaredDependency>
                                    <ignoredUnusedDeclaredDependency>org.spockframework:spock-core::</ignoredUnusedDeclaredDependency>
                                    <ignoredUnusedDeclaredDependency>cglib:cglib-nodep::</ignoredUnusedDeclaredDependency>
                                    <ignoredUnusedDeclaredDependency>org.objenesis:objenesis::</ignoredUnusedDeclaredDependency>
                                    <ignoredUnusedDeclaredDependency>org.slf4j:slf4j-simple::</ignoredUnusedDeclaredDependency>
                                </ignoredUnusedDeclaredDependencies>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${maven-jar-plugin.version}</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            </manifest>
                            <manifestEntries>
                                <Specification-Title>${project.name}</Specification-Title>
                                <Specification-Version>${project.version}</Specification-Version>
                                <Implementation-Title>${project.groupId}.${project.artifactId}</Implementation-Title>
                                <Implementation-Build-Time>${maven.build.timestamp}</Implementation-Build-Time>
                            </manifestEntries>
                        </archive>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven-surefire-plugin.version}</version>
                    <configuration>
                        <includes>
                            <include>**/*Test.*</include>
                            <include>**/*Tests.*</include>
                            <include>**/*Spec.*</include>
                            <include>**/*Specs.*</include>
                        </includes>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.diffplug.spotless</groupId>
                    <artifactId>spotless-maven-plugin</artifactId>
                    <version>${spotless-maven-plugin.version}</version>
                    <configuration>
                        <upToDateChecking>
                            <enabled>true</enabled>
                        </upToDateChecking>
                        <formats>
                            <format>
                                <includes>
                                    <include>*.md</include>
                                    <include>.gitignore</include>
                                    <include>*.properties</include>
                                </includes>
                                <trimTrailingWhitespace/>
                                <endWithNewline/>
                                <indent>
                                    <spaces>true</spaces>
                                    <spacesPerTab>4</spacesPerTab>
                                </indent>
                            </format>
                        </formats>
                        <java>
                            <includes>
                                <include>src/main/java/**/*.java</include>
                                <include>src/test/java/**/*.java</include>
                            </includes>
                            <importOrder>
                                <file>/heyuch/eclipse.importorder</file>
                            </importOrder>
                            <removeUnusedImports/>
                            <eclipse>
                                <file>/heyuch/eclipse-code-formatter.xml</file>
                            </eclipse>
                        </java>
                        <pom>
                            <includes>
                                <include>pom.xml</include>
                            </includes>
                            <sortPom>
                                <expandEmptyElements>false</expandEmptyElements>
                                <nrOfIndentSpace>4</nrOfIndentSpace>
                            </sortPom>
                        </pom>
                        <ratchetFrom>HEAD</ratchetFrom>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>io.github.heyuch</groupId>
                            <artifactId>build-utils</artifactId>
                            <version>${build-utils.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>org.openrewrite.maven</groupId>
                    <artifactId>rewrite-maven-plugin</artifactId>
                    <version>${rewrite-maven-plugin.version}</version>
                    <configuration>
                        <activeRecipes>
                            <recipe>io.github.heyuch.RewriteRules</recipe>
                        </activeRecipes>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>io.github.heyuch</groupId>
                            <artifactId>build-utils</artifactId>
                            <version>${build-utils.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <version>${checkstyle-maven-plugin.version}</version>
                    <configuration>
                        <configLocation>/heyuch/checkstyle.xml</configLocation>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>io.github.heyuch</groupId>
                            <artifactId>build-utils</artifactId>
                            <version>${build-utils.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <profiles>
        <profile>
            <id>codestyle</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.openrewrite.maven</groupId>
                        <artifactId>rewrite-maven-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>com.diffplug.spotless</groupId>
                        <artifactId>spotless-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>reformat</id>
                                <goals>
                                    <goal>apply</goal>
                                </goals>
                                <phase>process-sources</phase>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-checkstyle-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>checkstyle</id>
                                <goals>
                                    <goal>check</goal>
                                </goals>
                                <phase>verify</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

</project>
