Если вы читали любой из моих других блогов, вы будете знать, что я фанат (и защитник) 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:
![Technophile](images/technophile.png) Building Core Spring ========================== [Gordon Dickens](mailto:[email protected]) ----- 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.