Интегрируйте jQAssistant в сборку Maven, используя профиль и работающий сервер - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь интегрировать 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>

1 Ответ

0 голосов
/ 29 октября 2018

В моих проектах у меня есть родительский POM со следующим разделом управления плагинами:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.buschmais.jqassistant</groupId>
                <artifactId>jqassistant-maven-plugin</artifactId>
                <version>${jqassistant.version}</version>
                <configuration>
                    <useExecutionRootAsProjectRoot>true</useExecutionRootAsProjectRoot>
                </configuration>

                <executions>
                    <execution>
                        <id>scan</id>
                        <goals>
                            <goal>scan</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>analyze</id>
                        <goals>
                            <goal>analyze</goal>
                        </goals>
                        <configuration>
                            <failOnSeverity>MAJOR</failOnSeverity>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </pluginManagement>
</build>

Я также определил следующий профиль, который я использую для запуска jQAsssistant:

<profile>
    <id>verify-architecture</id>

    <build>
        <plugins>
            <plugin>
                <groupId>com.buschmais.jqassistant</groupId>
                <artifactId>jqassistant-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</profile>

Используя mvn -P verify-archicture clean install, я могу сканировать и анализировать свои проекты.

...