Если вы читали любой из моих других блогов, вы будете знать, что я фанат (и защитник) Maven 3. Одним из самых больших изменений в Maven 3 стали возможности создания отчетов с помощью плагина Maven Site .
Я покажу пример конфигурации для плагина Site 3.1 с использованием синтаксиса Markdown для содержимого страницы и проекта Markdown на Daring Fireball .
У большинства из нас есть несколько проектов. Когда я настраивал конфигурацию сайта, я должен был учитывать это. У меня возникли проблемы с агрегацией отчетов и занятиями в AspectJ с Cobertura для покрытия кода тестами.
Старый Конфиг (иначе забыть)
СТАРЫЙ раздел отчетности Maven.
<reporting/>
Новый Конфиг
Плагин Maven Site 3.x является «контейнером» для создания отчетов о плагинах.
Вот таблица некоторых из наиболее распространенных плагинов с открытым исходным кодом.
| отчет | Описание |
|---|---|
| Javadoc | Создает JavaDoc |
| Java XRef | Отчет о перекрестных ссылках исходного кода проекта |
| Список тегов | Отчеты о тегах, таких как @todo и // TODO |
| Информация о проекте | Множество разных отчетов: информация, ci, зависимости, scm, плагины и т. Д. |
| Проверьте Стиль | Проверяет стиль кода для разработчиков |
| безошибочный | Отчеты о результатах испытаний |
| PMD | Анализатор исходного кода |
| FindBugs | Отчеты о распространенных ошибках кода и подводных камнях |
| сонар | Анализ и метрики кода с течением времени |
| Cobertura | Отчеты о тестировании |
| Версии | Отчеты о версиях приложений и плагинов и любых доступных обновлениях |
конфигурация
...
<properties>
<maven.checkstyle.plugin>2.7</maven.checkstyle.plugin>
<maven.cobertura.plugin>2.5.1</maven.cobertura.plugin>
<maven.doxia.module.markdown.version>1.3</maven.doxia.module.markdown.version>
<maven.javadoc.plugin>2.8.1</maven.javadoc.plugin>
<maven.jxr.plugin>2.3</maven.jxr.plugin>
<maven.pmd.plugin>2.7.1</maven.pmd.plugin>
<maven.project.info.reports.plugin>2.4</maven.project.info.reports.plugin>
<maven.site.plugin>3.1</maven.site.plugin>
<maven.sonar.plugin>3.2-RC3</maven.sonar.plugin>
<maven.surefire.plugin>2.12</maven.surefire.plugin>
<maven.taglist.plugin>2.4</maven.taglist.plugin>
<maven.versions.plugin>1.3.1</maven.versions.plugin>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>${maven.site.plugin}</version>
<executions>
<!-- used for multiproject builds -->
<execution>
<id>attach-descriptor</id>
<goals>
<goal>attach-descriptor</goal>
</goals>
</execution>
</executions>
<configuration>
<reportPlugins>
<!-- Report Plugins go here -->
</reportPlugins>
<locales>en</locales>
</configuration>
<dependencies>
<!-- To use the Markdown format -->
<dependency>
<groupId>org.apache.maven.doxia</groupId>
<artifactId>doxia-module-markdown</artifactId>
<version>${maven.doxia.module.markdown.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
...
Теперь добавьте каждый плагин в раздел reportPlugins так же, как и любую другую зависимость.
Шаблоны страниц
Maven будет искать шаблоны страниц в каталоге src / site проекта. Если проект является родительским проектом pom, добавьте каталог src / site в корень проекта.
Here is a sample directory layout:
├── projectA │ ├── pom.xml │ └── src │ ├── main │ └── test ├── projectB │ ├── pom.xml │ └── src │ ├── main │ └── test ├── pom.xml ├── src │ └── site | ├── markdown | │ ├── build.md | │ ├── index.md | │ └── services | │ └── persistence.md | ├── resources | │ └── images | │ └── technophile.png | └── site.xml └── projectZ ├── pom.xml └── src ├── main └── test
Notice that src is at the same level as the top level pom.
Files:
Line 24: site.xml defines the sites layout.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0
http://maven.apache.org/xsd/decoration-1.0.0.xsd">
<body>
<menu name="Overview">
<item name="Introduction" href="index.html"/>
<item name="Building MyProject" href="build.html"/>
</menu>
<menu name="Common Services">
<item name="Persistence Detail" href="services/persistence.html"/>
</menu>
<menu ref="reports"/>
</body>
</project>
This generates a page with links for the index page, a build page and a persistence page. Also, line 17: menu ref=”reports” is a special link for the report plugins.
The *.md pages will convert from Markdown format into HTML. The build.md file might contain something like this:
 Building Core Spring ========================== [Gordon Dickens](mailto:gordon@gordondickens.com) ----- My Project ---------- This project infuses time, space and dimension into a convenient war file.
Line 1 is a reference to an image file. NOTE: this has to be in the site/resources directory.
Line 6 shows how to include a link or hyperlink.
Complete Reporting Config
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>${maven.site.plugin}</version>
<executions>
<execution>
<id>attach-descriptor</id>
<goals>
<goal>attach-descriptor</goal>
</goals>
</execution>
</executions>
<configuration>
<reportPlugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>${maven.surefire.plugin}</version>
<configuration>
<outputDirectory>${project.reporting.outputDirectory}/testresults</outputDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${maven.javadoc.plugin}</version>
<configuration>
<aggregate>true</aggregate>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${maven.checkstyle.plugin}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>${maven.project.info.reports.plugin}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<version>${maven.jxr.plugin}</version>
<configuration>
<aggregate>true</aggregate>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>${maven.cobertura.plugin}</version>
<configuration>
<aggregate>true</aggregate>
<outputDirectory>%{project.reporting.outputDirectory}/cobertura</outputDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>${maven.pmd.plugin}</version>
<configuration>
<aggregate>true</aggregate>
<sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
<!-- The minimum tokens before a violation -->
<minimumTokens>100</minimumTokens>
<!-- Turn off if no xref report -->
<linkXRef>true</linkXRef>
<verbose>true</verbose>
<targetJdk>${java.version}</targetJdk>
<rulesets>
<ruleset>/rulesets/maven.xml</ruleset>
<ruleset>/rulesets/migrating_to_junit4.xml</ruleset>
<ruleset>/rulesets/design.xml</ruleset>
<ruleset>/rulesets/unusedcode.xml</ruleset>
<ruleset>/rulesets/typeresolution.xml</ruleset>
</rulesets>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>${maven.findbugs.plugin}</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>${maven.versions.plugin}</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>taglist-maven-plugin</artifactId>
<version>${maven.taglist.plugin}</version>
<configuration>
<aggregate>true</aggregate>
</configuration>
</plugin>
</reportPlugins>
<locales>en</locales>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.doxia</groupId>
<artifactId>doxia-module-markdown</artifactId>
<version>${maven.doxia.module.markdown.version}</version>
</dependency>
</dependencies>
</plugin>
Summary
Wow, that’s a lot of config! The configuration sample above has a bit of overlap. Simple remove the report plugins that are not as important to you at the present time.
Watch out for the JXR plugin, this is a very time consuming report to generate. If this becomes something you want to run infrequently, I recommend different Maven profiles, one with JXR and one without.