使用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的配置有关,但尚未经确认。