使用Spring Boot和Jenkins的pom.xml配置示例

首先

这个pom.xml的配置示例是一个配置内容备忘录。

我是根据《Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発》和《Java本格入門》的示例代码,在IntelliJ IDEA中创建了这个pom.xml。

组成

系统 (xì

    • Spring Boot

 

    • Thymeleaf

 

    • PostqreSQL

 

    JPA

使用Jenkins生成报告

    • Checkstyle

 

    • FindBugs

 

    • JUnit

 

    JaCoCo

尽管我们已经设置了输出JavaDoc,但尚未成功将其输出到Jenkins的报告中。

pom.xml的实例

<?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>

    <groupId>sample</groupId>
    <artifactId>sample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>mrs</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <tomcat.version>8.5.15</tomcat.version>
        <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version> <!-- ① -->
        <thymeleaf-layout-dialect.version>2.0.0</thymeleaf-layout-dialect.version> <!-- ① -->
        <assertj-core.version>3.6.2</assertj-core.version> <!-- ② -->
    </properties>

    <repositories>
        <repository> <!-- ③ -->
            <id>gemfire-repository</id>
            <name>Gemfire Repository</name>
            <url>http://repo.spring.io/plugins-release/</url> 
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency> <!-- ① -->
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-java8time</artifactId>
            <version>3.0.0.RELEASE</version>
        </dependency>
        <dependency> <!-- ① -->
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity4</artifactId>
            <version>3.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <pluginManagement>
            <plugins>
                <plugin> <!-- ④ -->
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.20</version>
                    <configuration>
                        <argLine>-Xmx256m ${jacocoArgs}</argLine>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>2.17</version>
                <dependencies>
                    <dependency> <!-- ⑤ -->
                        <groupId>com.puppycrawl.tools</groupId>
                        <artifactId>checkstyle</artifactId>
                        <version>7.7</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.9</version>
                <executions> <!-- ⑥ -->
                    <execution>
                        <id>prepare-agent</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <propertyName>jacocoArgs</propertyName>
                            <includes>
                                <include>*</include>
                            </includes>
                        </configuration>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <reporting>
        <plugins>
            <plugin> <!-- ⑦ -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
                </configuration>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>index</report>
                            <report>license</report>
                            <report>summary</report>
                            <report>dependencies</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>2.17</version>
                <configuration>
                    <configLocation>config/checkstyle/google_checks.xml</configLocation>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>3.0.4</version>
                <configuration> <!-- ⑧ -->
                    <xmlOutput>true</xmlOutput>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.9</version>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>report</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.10.4</version>
                <configuration>
                    <source>${java.version}</source>
                    <encoding>${project.build.sourceEncoding}</encoding>
                    <docencoding>UTF-8</docencoding>
                    <charset>UTF-8</charset>
                </configuration>
                <reportSets>
                    <reportSet> <!-- ⑨ -->
                        <reports>
                            <report>javadoc</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jxr-plugin</artifactId>
                <version>2.5</version>
                <reportSets>
                    <reportSet> <!-- ⑩ -->
                        <reports>
                            <report>jxr</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
    </reporting>
</project>

设置内容的说明

①Thymeleaf的版本指定

由于Spring Boot的最新版本默认使用Thymeleaf 2,所以为了使用Thymeleaf 3系,我们进行了版本指定。

使用AssertJ

我們將JUnit4的斷言庫更換為AssertJ。
因為AssertJ能夠充分利用IDE的自動補全功能,通過方法鏈來撰寫測試代碼,對於不熟悉的我們來說更合適。
AssertJ 使用方法筆記

根据我所了解,由于在spring-boot-starter-test的依赖中已经集成了AssertJ,所以只需在属性中指定即可使用。

添加Gemfire存储库

由于Gemfire插件不在Maven仓库中,出现了警告。
Gemfire本身是否由Spring Boot使用?(只是为了消除警告,我没有详细研究过。)

④确保能生效的插件设置

JaCoCo和Maven之间的关系如下所示,我在输出JaCoCo报表时加入了处理警告的代码。详细信息请参考下面的链接。

⑤请指定Checkstyle的版本。

由于Maven的Checkstyle插件版本为6.11.2,为了使其在7.7版本中运行,我们添加了一个版本更新的操作。

⑥准备JaCoCo报告输出

为了在测试阶段输出jacoco.exe。
从jacoco.exe中输出报告。
如果只需要在Jenkins中显示报告,只要能够输出jacoco.exe就足够了,不需要输出定义,但是为了方便本地确认,需要能够输出报告。

在执行site时指定dependencyLocationsEnabled的选项

当执行mvn site命令时,解析存储库位置需要花费一些时间。通过执行mvn site -Ddependency.locations.enabled=false可以禁用该功能,但是为了避免每次都要输入该命令,所以需要添加配置。

我們還實現了限制要輸出的報告。Apache Maven Project Info Reports插件。

指定FindBugs输出报告。

true是用来生成findbags.xml文件的。
此外,无论上述设置如何,都会生成名为findbagsXml.xml的文件。我还没有调查这个文件的用途等情况。

不生成用JavaDoc生成测试代码的设置

通过指定 javadoc ,只能生成主目录源文件的Javadoc。如果不指定,还会为测试目录的源文件生成Javadoc。

设置JXR插件配置

jxr是一个用于互相引用项目源码的插件。在站点运行时,可以将源代码以HTML页面的形式显示出来。
Maven JXR插件
为了不将测试源码转换为HTML格式,可以指定jxr。

※安装这个插件的真正目的是为了在网站运行时避免以下警告。
[警告] 无法找到源XRef以链接至——已禁用
(在checkstyle生成报告时,警告出现在链接的行,可以直接跳转到相应的源代码,看起来在这里使用了jxr。)

概括起来

在这个设置下,可以在Jenkins中查看Checkstyle、JUnit和JaCoCo的结果。
(FindBugs方面,由于提交的源代码没有错误,所以无法确认报告的输出,但可能会输出。)

仍未得到解决

在执行man站点时,会输出以下警告:
[警告] 无法找到父项目的URL。父菜单将不会被添加。

从输出内容和时机上看,这与作为父POM的spring-boot-starter-parent的配置有关,但尚未经确认。

广告
将在 10 秒后关闭
bannerAds