Я пытаюсь интегрировать jQAssistant в мою существующую сборку Maven. У меня есть иерархия POM, но в основном верхняя POM определяет, что делает сборка. Вот где у меня есть мои <pluginManagement>
и мои плагины сборки, которые всегда используются. У меня также есть несколько профилей Maven для специальных сборок.
Итак, я хочу сканировать все классы во время сборки и объединить результаты в работающий сервер, чтобы иметь полностью заполненную базу данных Neo4J после сборки всех моих модулей Maven. База данных должна содержать всю мою базу кода.
Анализ и проверка были бы другим шагом, я не хочу делать это непосредственно при создании модуля Maven.
Все примеры, которые я вижу, создают локальную базу данных, а затем проверяют классы по ней. Насколько я понимаю, мне придется запустить сервер как демон, а затем настроить плагин Maven для использования URI «bolt» для его заполнения - это правильно?
Кроме того, поскольку я не хочу замедлять «нормальную» сборку, я добавил профиль Maven, чтобы активировать сканирование jQAssistant. Тем не менее, это работает только на моем главном POM, но не работает в любом другом проекте / модуле Maven. Наследование профилей - нормальная и ожидаемая особенность Maven - так что я делаю не так?
Вот мой родитель POM. Чтобы посмотреть, активен ли профиль, я также добавил PMD:
<?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>
<packaging>pom</packaging>
<groupId>foo</groupId>
<artifactId>parent</artifactId>
<version>1.50.0-SNAPSHOT</version>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<version>1.5.0</version>
<configuration>
<useExecutionRootAsProjectRoot>true</useExecutionRootAsProjectRoot>
</configuration>
</plugin>
</pluginManagement>
</build>
<profile>
<id>architecture</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>pmd</goal>
<goal>cpd</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<executions>
<execution>
<id>scan</id>
<goals>
<goal>scan</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</project>
Когда я запускаю mvn clean package -P architecture
в проекте Maven с этим родительским POM, я вижу следующий вывод, который показывает, что профиль активен:
09:30:12.316 [INFO]
09:30:12.316 [INFO] --- maven-pmd-plugin:3.5:pmd (default) @ util-type ---
09:30:15.073 [INFO]
09:30:15.073 [INFO] --- maven-pmd-plugin:3.5:cpd (default) @ util-type ---
09:30:15.976 [INFO]
Однако, jqassistant-maven-plugin
нигде.
Теперь, если я добавлю его в мои обычные <build>
плагины:
<build>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<executions>
<execution>
<id>scan</id>
<goals>
<goal>scan</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
тогда я вижу следующий вывод для mvn clean package
для моего родительского POM :
10:38:14.252 [INFO] --- jqassistant-maven-plugin:1.5.0:scan (scan) @ parent ---
10:38:15.684 [INFO] Loaded jQAssistant plugins [CDI, Common, Core Analysis, Core Report, EJB3, GraphML, JAX-RS, JPA 2, JSON, JUnit, Java, Java 8, Java EE 6, Maven 3, OSGi, RDBMS, Spring, TestNG, Tycho, XML, YAML].
10:38:15.952 [INFO] Connecting to store at 'file:/C:/jp/maven-parents/parent/target/jqassistant/store/'
10:38:20.058 [INFO] Initializing embedded Neo4j server 3.x
10:38:20.078 [INFO] Resetting store.
10:38:21.515 [INFO] Reset finished (removed 8453 nodes, 29427 relations).
10:38:22.372 [INFO] Entering C:/jp/maven-parents/parent/target/failsafe-reports
10:38:22.378 [INFO] Leaving C:/jp/maven-parents/parent/target/failsafe-reports (1 entries, 4 ms)
Однако в моем проекте Maven я не вижу вывода jQAssistant.
Запуск mvn help:effective-pom -Parchitecture
дает мне один и тот же вывод для родительского проекта и модуля Maven:
<plugin>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.5</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>pmd</goal>
<goal>cpd</goal>
</goals>
<configuration>
...
</configuration>
</execution>
</executions>
<configuration>
...
</configuration>
</plugin>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<version>1.5.0</version>
<executions>
<execution>
<id>scan</id>
<goals>
<goal>scan</goal>
</goals>
<configuration>
<useExecutionRootAsProjectRoot>true</useExecutionRootAsProjectRoot>
</configuration>
</execution>
</executions>
<configuration>
<useExecutionRootAsProjectRoot>true</useExecutionRootAsProjectRoot>
</configuration>
</plugin>